【问题标题】:Using Scala to cut up a large CSV file使用 Scala 分割一个大的 CSV 文件
【发布时间】:2011-04-07 05:25:07
【问题描述】:

在 Scala 2.8 中进行文件 IO 的最佳方式是什么?

我要做的就是将一个巨大的 CSV 文件切割成许多较小的文件,例如每个文件 1000 行数据,并且每个文件都保留标题。

【问题讨论】:

    标签: scala file-io csv scala-2.8


    【解决方案1】:

    Moritz 的回答很好,前提是您不会遇到一些 CSV 更烦人的极端情况。一个相关的例子是 CSV 数据,其中一列是可能包含换行符的字符串:您不能依赖一行位于单行上,否则您最终会将一些行切成两半。

    我会使用专用的 CSV 解析库将您的数据转换为迭代器。 kantan.csv 是一个例子(我是作者),但还有其他选择,例如 product-collectionsopencsv

    【讨论】:

      【解决方案2】:

      对于像这样的简单任务,我会使用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
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多