【问题标题】:How do I process a CSV file in scala so that I can separate its lines into arrays?如何在 scala 中处理 CSV 文件,以便可以将其行分成数组?
【发布时间】:2020-07-08 17:44:36
【问题描述】:

我正在尝试将 scala 中一个 300 多行长的 csv 文件处理成一个数组。

csv 文件包含如下所示

20200522T0600,26.852346
20200522T0700,26.862345
20200522T0800,27.262346
20200522T0900,28.562346
20200522T1000,29.472345
20200522T1100,29.432346

这些是日期、时间和温度。我必须将(日期时间)和(温度)放入单独的并行数组中,我应该稍后计算平均温度,但我可以这样做。我只是不知道如何将它们读入这两个数组。我知道我必须使用 fromFile() 和 .getLines 来获取行,但我被数组部分卡住了。

我试过了

object Weather {

    def main(args: Array[String]){
        val source = Source.fromFile("Weather.csv")
        var matrix :Array[String] = Array.empty
        for(line <- source.getLines.drop(10)){
            val cols = line.split(",").map(_.trim).toArray
            matrix = :+ cols
            println(matrix)
        }

    }
}

但我得到了这个结果

[error]             matrix = :+ cols
[error]                         ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed Jul 9, 2020 6:26:56 AM

提前致谢

【问题讨论】:

标签: scala csv


【解决方案1】:

首先,split() 返回一个数组,因此不需要.toArray= :+ 不是 Scala,所以这不会让你走得太远。

试试这个。

val lines = io.Source
              .fromFile("Weather.csv")  //open file
              .getLines                 //Iterator[String]
              .drop(10)                 // ?
              .map(_.split(","))        //Iterator[Array[String]]

如果您需要将所有内容加载到内存中,请在末尾添加.toList

查看结果。

lines.foreach(println)

或者你可能不得不做这样的事情。

lines.foreach(arr => println(arr.mkString("Array(", ",", ")")))

【讨论】:

    猜你喜欢
    • 2020-05-04
    • 2014-07-25
    • 2013-12-09
    • 2017-12-30
    • 1970-01-01
    • 2012-03-11
    • 2021-02-10
    • 2019-04-16
    • 2019-11-29
    相关资源
    最近更新 更多