处理Haskell中的大文件

时间:2009-12-18 00:40:26

标签: haskell large-files large-scale

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

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

3 个答案:

答案 0 :(得分:12)

您不应将其视为内存中的[Double][Float]。你可以做的是使用一个类似列表的打包数组类型,比如uvector / vector / ...与mmapFile或readFile公司一起拉入文件的块,然后处理它们。或者使用lazy packed数组类型,相当于lazy bytestrings。

答案 1 :(得分:9)

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

答案 2 :(得分:1)

您可以使用mmap将文件映射到内存然后进行处理。有一个mmap module承诺read and write mmaped files,甚至可以使用延迟映射的文件块,但我还没有尝试过。

写入映射文件的界面似乎水平很低,因此您必须构建自己的抽象或使用Foreign.Ptr等。