我被分配了从csv读取和创建ListMap变量的任务。使用这个特定类的原因是,对于其他一些用例,他们已经使用了ListMap作为输入参数的许多方法,他们又需要一个。
到目前为止我所做的是:从csv中读取,然后创建一个rdd。 csv的格式是
"field1,field2"
"value1,value2"
"value3,value4"
在这个rdd中我有字符串元组。我想要的是现在将其转换为ListMap类。所以我所拥有的是一个类型为 Array [(value1,value2),(value3,value4)] 的变量。
我这样做是因为我觉得从csv到元组很容易。问题是我找不到任何方法从这里到ListMap。获得一个普通的Map类似乎更容易,但正如我所说,最终结果必须是ListMap类型的对象。
我一直在阅读,但我并不理解this answer或this one
答案 0 :(得分:1)
Array("foo" -> "bar", "baz" -> "bat").toMap
为您提供Map
。
如果您正在寻找一个ListMap
专门(对于我的生活,想不出你为什么会这样做),那么你需要一个breakOut
:
val map: ListMap[String, String] =
Array("foo" -> "bar", "baz" -> "bat")
.toMap
.map(identity)(scala.collection.breakOut)
breakOut
是一种“集合工厂”,可让您隐式转换不同的集合类型。您可以在此处详细了解:https://docs.scala-lang.org/tutorials/FAQ/breakout.html
答案 1 :(得分:1)
根据您提供的示例数据,您可以使用collectAsMap
api获取最终ListMap
val rdd = sparkSession.sparkContext.textFile("path to the text file")
.map(line => line.split(","))
.map(array => array(0) -> array(1))
.collectAsMap()
多数民众赞成。
现在,如果您想更进一步,可以采取其他措施
var listMap : ListMap[String, String] = ListMap.empty[String, String]
for(map <- rdd) {
listMap += map
}