处理大量数据

时间:2014-06-20 12:15:57

标签: performance haskell

我们假设我有一个大文件(500GB +)并且我有一个数据记录 声明Sample,表示该文件中的一行:

data Sample = Sample {
field1 :: Int,
field2 :: Int
}

现在什么是适合处理的数据结构 (过滤/映射/折叠)这些Sample数据的集合?唐 斯图尔特has answered here不应该处理Sample类型 作为列表[Sample]类型,但作为Vector类型。我的问题是如何 将它表示为Vector类型解决问题?不 将文件内容表示为Sample类型的向量也将 占据500G左右?

解决这些问题的推荐方法是什么?

1 个答案:

答案 0 :(得分:3)

据我所知,您要使用的操作(filtermapfold)可以通过两个管道完成(请参阅Data.Conduit.List)和管道(见Pipes.Prelude)。

这两个库完全能够操作/折叠和过滤流式数据。根据您的情况,他们可能会解决您的实际问题。

但是,如果您需要多次调查值,则可以通过将块加载到向量中来实现更好的效果,如@Don所述。