spark不能在遍历rdd过程中修改全局map

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

误区一:不能在遍历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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值