假设我有一个大文件(500GB+)并且有一条数据记录
声明 Sample
指示该文件中的一行:
data Sample = Sample {
field1 :: Int,
field2 :: Int
}
现在适合处理的数据结构是什么
(filter/map/fold) 收集这些Sample
数据?大学教师
斯图尔特has answered here不应处理 Sample
类型
作为列表 [Sample]
类型,但作为 Vector
类型。我的问题是如何
将其表示为 Vector 类型是否可以解决问题?没有
将文件内容表示为 Sample
类型的向量也将
占用约500Gb?
解决此类问题的推荐方法是什么?
最佳答案
据我所知,您想要使用的操作(filter
、map
和 fold
)可以通过两个管道完成(参见 Data.Conduit.List
)和管道(参见 Pipes.Prelude
)。
这两个库都完全能够操作/折叠和过滤流数据。根据您的情况,他们可能会解决您的实际问题。
但是,如果您需要多次研究值,最好将 block 加载到向量中,如 @Don说。
关于performance - 处理海量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24327060/