如何使用Scala Stream类读取大型CSV文件?

Jan*_*ulp 40 csv streaming scala large-files

如何使用Scala Stream读取大型CSV文件(> 1 Gb)?你有代码示例吗?或者您是否会使用不同的方式来读取大型CSV文件而不先将其加载到内存中?

Kev*_*ght 70

只需Source.fromFile(...).getLines按照您的说法使用即可.

这将返回一个Iterator,它已经是懒惰的(您将使用stream作为一个惰性集合,您希望先前检索的值被记忆,因此您可以再次读取它们)

如果你遇到了记忆问题,那么问题将出在你 getLines 之后做的事情上.toList强制严格收集的任何操作都会导致问题.


soc*_*soc 13

我希望你不要指Scala collection.immutable.Stream与Stream.这不是你想要的.流是懒惰的,但记忆.

我不知道你打算做什么,但只是逐行阅读文件应该可以很好地工作,而不需要使用大量的内存.

getLines应该懒惰地评估并且不应该崩溃(只要你的文件没有超过2³²行,afaik).如果是,请询问#scala或提交错误票(或同时执行).