在haskell中读取大文件(大约1 TB)的最佳方法是什么.基本上该文件包含整数数据矩阵.我可能需要(有效地)计算不同行之间或列之间的相关性.
我之前使用过pytables但是想在haskell中尝试相同的方法.我知道haskell有一些hdf5绑定但是还有其他我不知道的选项吗?
Rom*_*aka 13
与任何其他语言一样:您寻找(使用System.IO.hSeek),然后使用二进制IO(Data.ByteString.hGet).然后解析结果(例如使用attoparsec)并根据需要进行处理.
Pet*_*lák 10
你也可以尝试一下mmap.例如,您可以将整个文件映射为ByteString:
import Data.ByteString as B
import System.IO.MMap
main = do
bs <- mmapFileByteString "myLargeFile" Nothing
let l = B.length bs
print l
-- print last 1024 bytes:
let bs2 = B.drop (l - 1024) bs
print (B.unpack bs2)
Run Code Online (Sandbox Code Playgroud)
切割出一块很快 - 没有数据被复制.然后你可以使用任何工具来解析ByteStrings.