我是Scala的新手并使用Spark来处理数据。为什么以下代码无法更改categoryMap?
import scala.collection.mutable.LinkedHashMap
val catFile=sc.textFile(inputFile);
var categoryMap=LinkedHashMap[Int,Tuple2[String,Int]]()
catFile.foreach(line => {
val strs=line.split("\001");
categoryMap += (strs(0).toInt -> (strs(2),strs(3).toInt));
})
答案 0 :(得分:4)
尝试远离可变数据结构和变量是一种很好的做法。有时它们是必需的,但通过链接转换操作很容易实现这种处理。此外,.toMap
可以将包含Seq
的{{1}}转换为Tuple2
。
这是一种方式(我没有正确测试):
Map
请注意,如果有一个以上的记录对应一个键,那么结果映射中只会出现最后一个记录。
编辑:我实际上没有回答您的原始问题 - 基于快速测试,它会产生与我上面的代码产生的类似的地图。盲目猜测,你应该确保你的val categoryMap = catFile map { _.split("\001") } map { array =>
(array(0).toInt, (array(2), array(3).toInt))
} toMap
实际上包含要处理的数据。