Skip to main content
 首页 » 编程设计

python之更新 RDD pyspark 中的字典值

2024年09月07日31Terrylee

我创建了 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 中的每个字典都有一个额外的键“actor”。顺序是一样的。我希望 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 ': '汤姆'}]