Объедините два разных RDD с двумя разными наборами данных, но с одним и тем же ключом

RDD_1 содержит следующие строки:

(u'id2875421', 2, datetime.datetime(2016, 3, 14, 17, 24, 55), datetime.datetime(2016, 3, 14, 17, 32, 30), 1, -73.9821548461914, 40.76793670654297, -73.96463012695312, 40.765602111816406, u'N', 455)

RDD_2 содержит следующие строки:

(u'id2875421', 1.9505895451732258)

Я пытаюсь получить rdd в виде

(u'id2875421', 2, datetime.datetime(2016, 3, 14, 17, 24, 55), datetime.datetime(2016, 3, 14, 17, 32, 30), 1, 1.9505895451732258, u'N', 455)

Поэтому я пытаюсь заменить столбцы местоположения столбцом расстояния.

rdd1.join (rdd2) дает мне:

(u'id1585324', (1, 0.9773030754631484))

и rdd1.union (rdd2) дает мне:

(u'id2875421', 2, datetime.datetime(2016, 3, 14, 17, 24, 55), datetime.datetime(2016, 3, 14, 17, 32, 30), 1, -73.9821548461914, 40.76793670654297, -73.96463012695312, 40.765602111816406, u'N', 455)


person wookieluvr13    schedule 01.10.2019    source источник
comment
Я обновил свой ответ, чтобы отразить, что происходит, когда я пытаюсь использовать join ()   -  person wookieluvr13    schedule 02.10.2019
comment
Этот пример не имеет смысла. Как получить 'id1585324' в результате объединения, если вы начали с id2875421? Пожалуйста, отредактируйте свой вопрос с помощью минимальный воспроизводимый пример.   -  person pault    schedule 02.10.2019
comment
@pault Я обновил вопрос. Спасибо за ваш ответ   -  person wookieluvr13    schedule 02.10.2019


Ответы (1)


IIUC, просто преобразуйте первый RDD в парный RDD, а затем присоединитесь:

rdd1.keyBy(lambda x: x[0]) \
    .join(rdd2) \
    .map(lambda x: x[1][0][:5] + (x[1][1],) + x[1][0][9:]) \
    .collect()

#[(u'id2875421',
#  2,
#  datetime.datetime(2016, 3, 14, 17, 24, 55),
#  datetime.datetime(2016, 3, 14, 17, 32, 30),
#  1,
#  1.9505895451732258,
#  u'N',
#  455)]

Здесь я использую keyBy () для преобразования x [0] из rdd1 в ключ и исходного элемента в качестве значения, затем присоединитесь к rdd2 и используйте функцию map (), чтобы выбрать то, что вы хотите в последний кортеж.

person jxc    schedule 01.10.2019