我们假设我有一个大文件(500GB +)并且我有一个数据记录
声明Sample
,表示该文件中的一行:
data Sample = Sample {
field1 :: Int,
field2 :: Int
}
现在什么是适合处理的数据结构
(过滤/映射/折叠)这些Sample
数据的集合?唐
斯图尔特has answered here不应该处理Sample
类型
作为列表[Sample]
类型,但作为Vector
类型。我的问题是如何
将它表示为Vector
类型解决问题?不
将文件内容表示为Sample
类型的向量也将
占据500G左右?
解决这些问题的推荐方法是什么?
答案 0 :(得分:3)
据我所知,您要使用的操作(filter
,map
和fold
)可以通过两个管道完成(请参阅Data.Conduit.List
)和管道(见Pipes.Prelude
)。
这两个库完全能够操作/折叠和过滤流式数据。根据您的情况,他们可能会解决您的实际问题。
但是,如果您需要多次调查值,则可以通过将块加载到向量中来实现更好的效果,如@Don所述。