更新RDD pyspark中的字典值

时间:2018-04-15 03:03:19

标签: python dictionary apache-spark pyspark rdd

我创建了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

中第一个字典的值

我希望将其作为

[{'演员':' brad',       好的':1.4,       '坏':0.4,       '平均':0.6,}      {'演员':' tom',       '好':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]

这不起作用。如何更新值。

1 个答案:

答案 0 :(得分:2)

这对你有好处吗?

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()

[{' bad':0.4,' good':1.4,'平均':0.6,'演员':' ; brad'},{' bad':1.7,' good':0.4,'平均':1.2,'演员': '汤姆'}]