Pyspark 结合两种不同的RDD';具有两组不同数据但具有相同密钥的

Pyspark 结合两种不同的RDD';具有两组不同数据但具有相同密钥的,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,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) (u'id2875421', 1.9505895451732258) 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)
(u'id2875421', 1.9505895451732258)
RDD_2包含如下行:

(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)
(u'id2875421', 1.9505895451732258)
我想做的是以

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

rdd1.union(rdd2)给了我:

(u'id1585324', (1, 0.9773030754631484))
(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)


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

在这里,我使用函数将rdd1的x[0]转换为键,并将原始元素转换为值,然后连接rdd2并使用map()函数在最后的元组中选择所需的内容。

rdd1.join(rdd2)
?我更新了答案,以反映在尝试使用join()时发生的情况。该示例毫无意义。当您从
id2875421
开始时,如何获得加入后的
'id1585324'
?请回答你的问题。@pault我更新了问题。谢谢你的回复