处理Haskell中的大文件

Jon*_*off 9 haskell large-files large-scale

我有一个大文件(4 +演出),简单地说,4字节浮点数.我想将它视为List,在某种意义上我希望能够使用map,filter,foldl等.但是,我想将输出写回输入,而不是生成带有输出的新列表.该文件,因此只需要在内存中加载一小部分文件.你可以说我是一个名为MutableFileList的类型

有没有人遇到过这种情况?而不是重新发明轮子我想知道是否有一个Hackish方式来处理这个?

Don*_*art 12

你不应该把它当作内存[Double][Float]内存.你可以做的是使用一个类似列表的打包数组类型,比如uvector/vector/...与mmapFile或readFile公司一起拉入文件的块,然后处理它们.或者使用惰性打包数组类型,相当于延迟字节串.


Ray*_*yne 9

应该对你很有帮助.你可以使用readFilewriteFile你需要做的事情,一切都懒洋洋地完成.它只会在内存中保留内存,因此您可以在不炸毁计算机的情况下读取,处理和写入文件.


sth*_*sth 1

您可以使用mmap将文件映射到内存,然后对其进行处理。有一个mmap 模块承诺读取和写入 mmaped 文件,甚至可以处理延迟映射的文件块,但我还没有尝试过。

用于写入映射文件的接口似乎相当低级别,因此您必须构建自己的抽象或使用Foreign.Ptr等等。