读取CSV到Map [String,String]

时间:2019-06-19 07:45:15

标签: scala

我需要(从输入流中)读取2列csv并返回Map。

文件score.txt

player1,21
player2,99
player3,143

无效代码:

Try(Source.fromInputStream(getClass.getResourceAsStream(s"$RelativePath/$fileName")).getLines().map(_.split(","))) match {
      case Success(scoreMap) => scoreMap
      case Failure(err) => //TODO add throw exception
    }

第一行返回一个Iterator[Array[String]],但是如何返回一个Map[String,String]

P.S。我已经在堆栈上尝试了各种“ CSV到MAP”解决方案,每个解决方案看起来都是用自己的语言编写的,并且都出现了我无法解决的错误。

1 个答案:

答案 0 :(得分:0)

假设您从下一行收到的输入

Source.fromInputStream(getClass.getResourceAsStream(s"$RelativePath/$fileName")).getLines().map(_.split(","))

采用以下格式

val inputArr: Iterator[Array[String]] = Array(
  Array("player1", "21"),
  Array("player2", "99"),
  Array("player3", "143")
).toIterator

要将此Iterator[Array[String]]转换为Map[String, String],可以编写以下函数

val output = inputArr.map{ arr =>
  arr(0) -> arr(1)
}.toMap

它将为您提供输出

output: scala.collection.immutable.Map[String,String] = Map(player1 -> 21, player2 -> 99, player3 -> 143)

如果这能回答您的问题,请告诉我。