【发布时间】:2011-04-07 05:25:07
【问题描述】:
在 Scala 2.8 中进行文件 IO 的最佳方式是什么?
我要做的就是将一个巨大的 CSV 文件切割成许多较小的文件,例如每个文件 1000 行数据,并且每个文件都保留标题。
【问题讨论】:
标签: scala file-io csv scala-2.8
在 Scala 2.8 中进行文件 IO 的最佳方式是什么?
我要做的就是将一个巨大的 CSV 文件切割成许多较小的文件,例如每个文件 1000 行数据,并且每个文件都保留标题。
【问题讨论】:
标签: scala file-io csv scala-2.8
Moritz 的回答很好,前提是您不会遇到一些 CSV 更烦人的极端情况。一个相关的例子是 CSV 数据,其中一列是可能包含换行符的字符串:您不能依赖一行位于单行上,否则您最终会将一些行切成两半。
我会使用专用的 CSV 解析库将您的数据转换为迭代器。 kantan.csv 是一个例子(我是作者),但还有其他选择,例如 product-collections 或 opencsv。
【讨论】:
对于像这样的简单任务,我会使用scala.io.Source。一个示例如下所示:
val input = io.Source.fromFile("input.csv").getLines()
if (input.hasNext) {
// assuming one header line
val header = List(input.next())
for ((i, lines) <- Iterator.from(1) zip input.grouped(linesPerFile)) {
val out = createWriter(i) // Create a file for index i
(header.iterator ++ lines.iterator).foreach(out.println)
out.close
}
}
【讨论】: