You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark中对RDD内两个字典的同键值执行相加操作的咨询

解决Spark RDD中字典元素数值相加的问题

嘿,我来帮你完成这个字典数值相加的操作!你已经通过filter和first()拿到了目标字典d1和d2,接下来只需要对两个字典的相同数值键做求和处理就行,下面给你几种可行的实现方式:

1. 直接指定键求和(适合已知固定键的场景)

如果你的RDD中每个字典的键都是固定的(比如示例里的good、bad、average),直接逐个键相加最直观,代码也容易维护:

d1 = rdd.filter(lambda x: x['actor']=='brad').first()
d2 = rdd.filter(lambda x: x['actor']=='tom').first()

# 先检查是否找到目标数据,避免空值报错
if not d1 or not d2:
    raise ValueError("未在RDD中找到'brad'或'tom'对应的记录")

# 构建结果字典
dc = {
    'actor': 'brad_and_tom',  # 自定义组合后的actor名称,可按需修改
    'good': d1['good'] + d2['good'],
    'bad': d1['bad'] + d2['bad'],
    'average': d1['average'] + d2['average']
}

2. 字典推导式批量求和(适合键数量多的场景)

如果你的字典有30000个键,手动写每个键显然不现实,用字典推导式可以批量处理所有非actor的数值键:

d1 = rdd.filter(lambda x: x['actor']=='brad').first()
d2 = rdd.filter(lambda x: x['actor']=='tom').first()

if not d1 or not d2:
    raise ValueError("未在RDD中找到'brad'或'tom'对应的记录")

# 批量求和除actor外的所有键
dc = {
    'actor': 'brad_and_tom',
    **{key: d1[key] + d2[key] for key in d1 if key != 'actor'}
}

这里的**是Python的字典解包语法,能把推导式生成的键值对快速合并到结果字典里。

3. 健壮性更高的通用写法(处理键不统一的情况)

如果担心两个字典的键可能存在差异,或者有些值不是数值类型,可以用更严谨的遍历方式,只对共同的数值键求和:

d1 = rdd.filter(lambda x: x['actor']=='brad').first()
d2 = rdd.filter(lambda x: x['actor']=='tom').first()

if not d1 or not d2:
    raise ValueError("未在RDD中找到'brad'或'tom'对应的记录")

dc = {'actor': f"{d1['actor']}_and_{d2['actor']}"}
# 遍历两个字典的共同键,只相加数值类型的值
for key in d1.keys() & d2.keys():
    if isinstance(d1[key], (int, float)) and isinstance(d2[key], (int, float)):
        dc[key] = d1[key] + d2[key]

用你提供的示例数据执行后,dc的结果会是:

{'actor': 'brad_and_tom', 'good': 1, 'bad': 1, 'average': 1}

内容的提问来源于stack exchange,提问作者Jerry George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:21:40