PySpark join返回一个空字典而不是无

时间:2019-03-24 18:51:51

标签: python pyspark pagerank

我有一个RDD:

[('4', 1),
 ('1', 1),
 ('8', 1),
 ('9', 1),
 ('10', 1),
 ('2', 1),
 ('3', 1),
 ('5', 1),
 ('6', 1),
 ('7', 1),
 ('11', 1)]

我正尝试将RDD与另一个RDD:

[('2', ({'3': 1}, 1)),
 ('3', ({'2': 1}, 1)),
 ('4', ({'1': 1, '2': 1}, 2)),
 ('5', ({'4': 1, '2': 1, '6': 1}, 3)),
 ('6', ({'2': 1, '5': 1}, 2)),
 ('7', ({'2': 1, '5': 1}, 2)),
 ('8', ({'2': 1, '5': 1}, 2)),
 ('9', ({'2': 1, '5': 1}, 2)),
 ('10', ({'5': 1}, 1)),
 ('11', ({'5': 1}, 1))]

因此,我返回的记录之一是

('1', (1, None)),

作为参考,其他记录如下:

[('4', (1, ({'1': 1, '2': 1}, 2))),

这给我带来了麻烦,因为我以后需要处理数据,并且我需要一个空字典,而不是无字典。即('1', (1, ({}, 0)))这样做的干净方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用map这样做,并测试None

def rep(r):
  if r[1][1] == None:
    return (r[0], (r[1][0],({},0)))
  return r

rdd_left.leftOuterJoin(rdd_right).map(rep).collect()

这将在示例数据上产生所需的输出。