如何在scala中处理CSV文件,以便将其行分隔成数组



我正试图将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

提前感谢

首先,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(", ",", ")")))