我有一个csv文件,其中包含以下数据:
key1,value1,value2,value3
key2,value1,value2,value3
key3,value1,value2,value3
我能够在Scala中读取文件,但此后没什么。
val file = scala.io.Source.fromFile("filepath").getLines.toList
file: List[String] = List(key1,value1,value2,value3, key2,value1,value2,value3, key3,value1,value2,value3)
我希望输出像:
Map(key1->value1),Map(key1->value2),Map(key1->value3),Map(key2->value1)
...以此类推`
答案 0 :(得分:1)
假设这是固定的布局,则可以将files
的值变成键/值对,如下所示:
val kv = file
.grouped(4)
.flatMap{
case List(k, v1, v2, v3) => List(k -> v1, k ->v2, k -> v3)
}.toList
这给
List((key1,value1), (key1,value2), (key1,value3), (key2,value1), (key2,value2), (key2,value3), (key3,value1), (key3,value2), (key3,value3))
您的最终输出看起来很奇怪,因为它只是单项Map
的列表,但是,如果这确实是您想要的,则只需要一个简单的map
调用:
kv.map(x => Map(x))
如果每行中的值数量可变,则需要分别处理每行,如下所示:
val src = scala.io.Source.fromFile("filepath")
val res =
src.getLines.toList.flatMap { line =>
line.split(",").toList match {
case key :: values =>
values.map(v => key -> v)
case _ =>
Nil
}
}
src.close()