误区一:不能在遍历rdd过程中修改全局map
这个是mutable包下map,是可修改的
将foreach改成map也不行
解决方法:
先将rdd转成map,然后修改map,最后再转成rdd保存出来
这样可能无法实现分布式,在master机器上完成计算
本次需求背景:
Spark代码输出的rdd
(pkg1, 1)
(pkg2, 1)
但我想要的输出:
(pkg1, 1)
(pkg2, 1)
(Pkg3, 0)
(Pkg4, 0)
我想要一个所有key都存在的一个map,而不是只含有value!=0的map
开始的想法:
定义一个全局的map,在遍历rdd过程中修改这个map,而且我特别注意这个map是mutable包下可修改的map
但是代码一直不起效,见图一
rdd转Set
val toSet: Set[String] = file.map(u => {
strings ++= Set(u)
strings
}).collect().flatten.toSet
rdd转Map
val appdict =