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

Scala中如何将键值对CSV文件转换为Map[String,String]集合

Scala读取CSV映射文件生成Map的实现方法

现有存储缩写与完整值映射关系的CSV文件内容如下:

original,mappedValue
bbc,britishBroadcastingCorporation
ch4,channel4

需要转换得到的目标Map结构:

val x:Map[String,String] = Map("bbc"->"britishBroadcastingCorporation", "ch4"->"channel4")

当前使用Source.fromFile("pathToFile.csv").getLines().drop(1).map(_.split(","))得到的是Iterator[Array[String]]类型,无法直接生成Map,可按如下方式修改代码:

基础实现

在原有拆分逻辑的基础上,将拆分得到的数组转为键值对二元组,最后调用toMap即可:

import scala.io.Source

val x: Map[String, String] = Source
  .fromFile("pathToFile.csv")
  .getLines()
  .drop(1) // 跳过第一行表头
  .map(line => {
    val Array(key, value) = line.split(",", 2)
    key -> value
  })
  .toMap

关键点说明

  • split(",", 2)传入第二个参数限制最大拆分长度为2,避免后续映射值本身包含逗号时,拆分出数组长度不符合预期触发报错
  • 拆分后通过key -> value生成Scala二元组,Iterator中存储二元组时可直接调用toMap方法收集为键值对集合,完全匹配目标结构

资源安全写法

直接使用Source会占用文件句柄,推荐使用Using自动管理资源,避免资源泄漏:

import scala.io.Source
import scala.util.Using

val mapResult: Either[Throwable, Map[String, String]] = Using(Source.fromFile("pathToFile.csv")) { source =>
  source
    .getLines()
    .drop(1)
    .map { line =>
      val Array(k, v) = line.split(",", 2)
      k -> v
    }
    .toMap
}

执行后从mapResult中即可取到生成的Map对象,文件资源会在逻辑执行完成后自动关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:45:43