我遇到了错误
error: Cannot prove that (Int, String, String, String, String, Double, String) <:< (T, U).
}.collect.toMap
执行具有以下代码段的应用程序时。
val trains = sparkEnvironment.sc.textFile(dataDirectoryPath + "/trains.csv").map { line =>
val fields = line.split(",")
// format: (trainID,trainName,departure,arrival,cost,trainClass)
(fields(0).toInt, fields(1),fields(2),fields(3),fields(4).toDouble,fields(5))
}.collect.toMap
可能是什么原因,任何人都可以建议一个解决方案?
答案 0 :(得分:0)
如果您想在toMap
上执行Seq
,则表示您的序号为Tuple2
。 toMap的ScalaDoc声明:
除非元素是Tuple2的成员,否则此方法不可用, 每个((T,U))成为地图中的键值对
所以你应该这样做:
val trains = sparkEnvironment.sc.textFile(dataDirectoryPath + "/trains.csv").map { line =>
val fields = line.split(",")
// format: (trainID,trainName,departure,arrival,cost,trainClass)
(fields(0).toInt, // first element of Tuple2 -> "key"
(fields(1),fields(2),fields(3),fields(4).toDouble,fields(5)) // 2nd element of Tuple2 -> "value"
)
}.collect.toMap
这样你的map-statwment会返回RDD[(Int, (String, String, String, String, Double, String))]