2

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)

4

1 回答 1

2

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] 转换为键和原始元素作为值,然后加入rdd2并使用 map() 函数在最终元组中选择您想要的内容。

于 2019-10-01T23:52:53.753 回答