PySpark присоединиться вернуть пустой словарь не None - PullRequest
1 голос
/ 24 марта 2019

У меня есть СДР:

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

Я пытаюсь оставитьODerJoin () этот СДР с другим:

[('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))),

Это вызывает у меня проблемы, так как мне нужно разобраться с данными позже, и мне нужен пустой словарь, а не None.Т.е. ('1', (1, ({}, 0))) Каким будет чистый способ сделать это?

1 Ответ

1 голос
/ 24 марта 2019

Вы можете сделать это так с 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()

Это даст желаемый результат для ваших примеров данных.

...