gpt4 book ai didi

python - 在 PySpark 上的 RDD 中的字典之间减去值

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:32 25 4
gpt4 key购买 nike

我创建了 RDD,其中每个元素都是一个字典。

rdd.take(2)

[{'actor': 'brad',
'good': 1,
'bad': 0,
'average': 0,}
{'actor': 'tom',
'good': 0,
'bad': 1,
'average': 1,}]

我正在尝试对数据执行算术运算,即'actor': 'brad' 和 'actor': 'tom',我想减去具有相同键的其他值,然后找到最终的和

即:

(1-0)+(0-1)+(0-1)= -1

因为这是 RDD 形式,所以我尝试做的是:

d1=rdd.filter(lambda x: x['name']=='brad').first()

{'actor': 'brad',
'good': 1,
'bad': 0,
'average': 0,}

d2=rdd.filter(lambda x: x['name']=='tom').first()

{'actor': 'tom',
'good': 0,
'bad': 1,
'average': 1,}

这为我提供了值为“brad”和“tom”的字典。如何进行算术运算?

我试过这样做:

d3 = {key: d1] - d2.get(key, 0) for key in d1.keys()}

但这给我带来了错误。

有没有更好的方法来处理 RDD 本身中的字典而不是将其分解为基本字典?

谢谢

最佳答案

您的一些错误是由于使用了错误的键(“name” 不在字典中)。但除此之外,收集普通字典可能是最合适的方法(见底部注释)。

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

使用预定义键列表:

keys = ['good', 'bad', 'average']

您可以使用理解生成生成的字典:

{key: d1[key] - d2[key] for key in keys}
# outputs:
{'average': -1, 'bad': -1, 'good': 1}

然后可以简单地计算所有字典值的总和:

print(sum([v for v in dc.values()])) #-1

如果它们收集在并行列表中,您甚至可以对多个字典执行此操作(假设您确切知道这 2 个 RDD 是按允许逐个索引操作的顺序收集的)

[{key: d1[key] - d2[key] for key in keys}\
for d1,d2 in zip(dicRdd1.collect(), dicRdd2.collect())]

您可以使用(您的示例词典)测试此逻辑:

[{key: d1[key] - d2[key] for key in keys}\
for d1,d2 in zip([d1], [d2])]

注意:您应该避免在 Spark 的分布式归约操作中执行减法。这仅仅是因为减法是不可交换的,这会导致不可预测的结果。

关于python - 在 PySpark 上的 RDD 中的字典之间减去值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com