#python #pyspark #pagerank
#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)]
Я пытаюсь соединить leftOuterJoin () этот 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))),
Это вызывает у меня проблемы, поскольку мне нужно разобраться с данными позже, и мне нужен пустой словарь, а не None. Т.е. ('1', (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()
Это дает желаемый результат для ваших данных примера.