You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala如何读取CSV文件至不定大小的二维数组/矩阵

解决你的Scala CSV处理代码错误

首先来看你标记行的问题:在Scala里,Array是泛型类型,你不能直接声明val seriesArray : Array,必须指定数组里元素的类型——这里你把分割后的字符串转成了Int,所以应该写成Array[Int]。

另外,你的需求是要得到存储所有行数据的数组的数组,但当前代码只是循环处理每行,没有把每行生成的数组收集起来,这也需要调整。

修正后的完整代码

import scala.io.Source

object CsvProcessor {
  def main(args: Array[String]): Unit = {
    val file = "/home/tolga/Desktop/mics18-2/big-data/homework2/covtype.csv/data-10.csv"
    // 收集所有行的数组,最终得到Array[Array[Int]]
    val allRows: Array[Array[Int]] = Source.fromFile(file)
      .getLines()
      .map(line => line.split(",").map(_.toInt).distinct) // 每行转成Int数组并去重
      .toArray // 把迭代器转换为数组的数组

    // 可打印验证结果
    allRows.foreach(row => println(row.mkString(", ")))
  }
}

关键修正点

  • 类型声明修正:把Array改为Array[Int],明确数组元素类型,符合Scala的强类型语法要求。
  • 收集所有行数据:使用toArray将getLines()返回的迭代器转换为数组的数组,这样就能把所有行处理后的结果统一存储起来,满足你的核心需求。
  • 函数式风格优化:把原有的for循环改成链式调用,更贴合Scala的函数式编程习惯,代码也更简洁。

额外小提示:如果你的CSV里可能存在非数字内容,建议加上异常处理避免toInt抛出错误,比如:

.map(line => line.split(",").flatMap(str => scala.util.Try(str.toInt).toOption).distinct)

这样会自动跳过无法转换为Int的字符串,防止程序意外崩溃。

内容的提问来源于stack exchange,提问作者Tolga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:55:21