在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