如何在scala中将csv文件读入数组数组

时间:2015-08-17 16:37:33

标签: arrays scala csv matrix multidimensional-array

我正在尝试读取csv文件并将其作为双精度数组(Array[Array[Double]])返回。很清楚如何逐行读取文件并立即将其打印出来,而不是如何将其存储在二维数组中。

def readCSV() : Array[Array[Double]] = {
    val bufferedSource = io.Source.fromFile("/testData.csv")
    var matrix :Array[Array[Double]] = null
    for (line <- bufferedSource.getLines) {
        val cols = line.split(",").map(_.trim)
        matrix = matrix :+ cols
    }
    bufferedSource.close
    return matrix
}

有一些类型的问题,然后意识到我没有做我认为我在做的事情。非常感谢任何帮助我指出正确轨道的帮助。

2 个答案:

答案 0 :(得分:4)

看来你的问题已经回答了。所以,作为旁注,您可以用更加类似的方式编写代码:

def readCSV() : Array[Array[Double]] = {
  io.Source.fromFile("/testData.csv")
    .getLines()
    .map(_.split(",").map(_.trim.toDouble))
    .toArray
}

答案 1 :(得分:1)

1)你应该从一个空的数组开始,而不是null。 2)使用运算符:+将项追加到数组 3)由于结果类型为Array[Array[Double]],您需要将csv的字符串转换为Double

def readCSV() : Array[Array[Double]] = {
    val bufferedSource = io.Source.fromFile("/testData.csv")
    var matrix :Array[Array[Double]] = Array.empty
    for (line <- bufferedSource.getLines) {
        val cols = line.split(",").map(_.trim.toDouble)
        matrix = matrix :+ cols
    }
    bufferedSource.close
    return matrix
}