匹配键并在pyspark中加入2个RDD而不使用数据帧

时间:2017-12-26 12:55:56

标签: python apache-spark join pyspark rdd

我有2个RDD。

RDD 1:
[['1', 'user1', 'Name1'],
 ['2', 'user4', 'Name2']]

RDD 2:
[['5', '1a', '3', '99', 'g1'],
 ['11', '2b', '1', '99', 'g2'],
 ['12', '3c', '2', '99', 'g3']]

我必须使用RDD 1(1,2)等中的第一个字段和RDD2(3,1,2)等中的第3个字段加入上述2个RDD,并且只有当它的时候才能获得写入新输出RDD的匹配行两者都有。我知道有一个可以执行的连接操作。但不确定如何。

Required output
[['1','Name1'],
 ['2','Name2']] 

如何处理?有没有办法在不使用数据帧的情况下执行此操作?

类似问题的答案并没有帮助我找到理想的解决方案。所以我不得不再次发布查询。

1 个答案:

答案 0 :(得分:4)

您也可以加入RDD。此代码将为您提供您想要的内容。

tuple_rdd1 = rdd1.map(lambda x: (x(0), x(2)))
tuple_rdd2 = rdd1.map(lambda x: (x(2), 0)) )
result = tuple_rdd1.join(tuple_rdd2).map(lambda x:  [x[0], x[1][0] ])

第1行选择rdd1中的键和名称。第2行选择rdd2的第3列,最后一行连接两者,并将结果放入所需的格式。