我创建了 RDD,其中每个元素都是字典。
rdd.take(2)
[{'actor': 'brad',
'good': 1,
'bad': 0,
'average': 0,}
{'actor': 'tom',
'good': 0,
'bad': 1,
'average': 1,}]
我有一个以下形式的字典列表:
d2:
[{'good': 1.4,
'bad': 0.4,
'average': 0.6,}
{'good': 0.4,
'bad': 1.7,
'average': 1.2,}]
我想将 d2 的值分配给 Rdd。
Rdd 和 d2 的长度相同。 RDD 中的每个字典都有一个额外的键“角色”。顺序是一样的。我希望将 d2 的字典按数字顺序分配给 rdd 的字典。即 d2 的第一个字典更新 rdd 中第一个字典的值
我想得到它
[{' Actor ': '布拉德', “好”:1.4, “坏”:0.4, “平均”:0.6,} {' Actor ': '汤姆', “好”:0.4, “差”:1.7, “平均”:1.2,}]
我尝试过:
for dic in d2:
for key in rdd.filter(lambda x: x).first().keys():
rdd.filter(lambda x: x).first()[key]=dic[key]
这不起作用。如何更新这些值。
最佳答案
这对你有好处吗?
rdd = sc.parallelize([{'actor': 'brad',
'good': 1,
'bad': 0,
'average': 0},
{'actor': 'tom',
'good': 0,
'bad': 1,
'average': 1}])
d2 = [{'good': 1.4,
'bad': 0.4,
'average': 0.6},
{'good': 0.4,
'bad': 1.7,
'average': 1.2}]
def update_and_return_dict(_dict, update_dict):
_dict.update(update_dict)
return _dict
print rdd.zipWithIndex().map(lambda x: update_and_return_dict(x[0], d2[x[1]])).collect()
[{'坏': 0.4, '好': 1.4, '平均': 0.6, ' Actor ': '布拉德'}, {'坏': 1.7, '好': 0.4, '平均': 1.2 , ' Actor ': '汤姆'}]
关于python - 更新 RDD pyspark 中的字典值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49838110/