误区一:不能在遍历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 =

博客指出在Spark中遍历RDD时不能直接修改全局的mutable.Map,因为这会导致不可预期的行为。正确的做法是先将RDD转换为Map,进行修改后再转换回RDD。博主遇到的需求是在RDD中填充所有可能的键,即使值为0,而尝试在遍历过程中更新全局Map的方法失败。解决方案可能涉及到在Driver端完成Map的构建和更新。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



