在Scala 2.8中做文件IO的最佳方式是什么?使用Scala来分割一个大的CSV文件
我想要做的就是将一个海量的CSV文件剪切成许多较小的文件,例如每个文件有1000行数据,并且每个文件保留标题。
在Scala 2.8中做文件IO的最佳方式是什么?使用Scala来分割一个大的CSV文件
我想要做的就是将一个海量的CSV文件剪切成许多较小的文件,例如每个文件有1000行数据,并且每个文件保留标题。
对于这样的简单任务,我会使用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
}
}
如果你没有遇到一些CSV更恼人的角落案例,莫里茨的回答很好。一个相关的例子是CSV数据,其中一列是一个可能包含换行符的字符串:您不能依赖单行上的行,或者最终将一些行减半。
我会使用专用的CSV解析库来将您的数据转换为迭代器。 kantan.csv就是一个例子(我是作者),但还有其他的选择,如product-collections或opencsv。
太好了。强迫我学习'拉链'也是如此! – Pengin 2010-09-02 18:20:03