将两个不同的 RDD 与两组不同的数据但相同的键结合起来
Combine two different RDD's with two different sets of data but the same key
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)
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()函数将rdd1的x[0]转为key,原元素为value,然后加入rdd2 并使用 map() 函数在最终元组中选择您想要的内容。
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)
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()函数将rdd1的x[0]转为key,原元素为value,然后加入rdd2 并使用 map() 函数在最终元组中选择您想要的内容。