【发布时间】:2017-12-30 16:50:41
【问题描述】:
我有一个 CSV 文件,我需要对其进行解析并对每条记录执行一些操作。我如何使用 Free Monads?目前,我正在将整个文件加载到内存中,并想知道是否有更好的解决方案。下面是我的程序:
for {
reader <- F.getReader("my_file.csv")
csvRecords <- C.readCSV(reader)
_ <- I.processCSV(csvRecords)
_ <- F.close(reader)
} yield()
此代码适用于较小的文件,但如果我有非常大的文件(超过 1 GB),这将无法很好地工作。我使用Commons CSV 来读取CSVRecords。
【问题讨论】:
-
arjunswaj,你真正需要什么:一种使用 Free Monad 的方法或任何有效且不会将整个文件加载到内存中的解决方案?
-
@SergGr 我想要一个使用 Free Monad 并且不会将整个文件加载到内存中的方法。
-
好的,免费的单子是强制性的,你能告诉我们你目前的
readCSV和processCSV吗?CSVParser似乎已经提供了Iterable/IteratorAPI -
@SergGr, here 是我所拥有的程序的要点。
-
我想以 FP 方式做更多事情——不使用带有 Iterable/Iterator 的
hasNext/next的 while 循环。也许通过使用流。在上面的当前实现中,流是从 List 创建的,并且 list 将文件中的所有记录加载到内存中。
标签: scala dsl scalaz scala-cats free-monad