如何使用python将两个RDD加入spark中?

Pen*_*Sun 7 join apache-spark pyspark

假设

rdd1 = ( (a, 1), (a, 2), (b, 1) ),
rdd2 = ( (a, ?), (a, *), (c, .) ).
Run Code Online (Sandbox Code Playgroud)

想要生成

( (a, (1, ?)), (a, (1, *)), (a, (2, ?)), (a, (2, *)) ).
Run Code Online (Sandbox Code Playgroud)

任何简单的方法?我认为它与交叉连接不同但无法找到一个好的解决方案.我的解决方案是

(rdd1
 .cartesian( rdd2 )
 .filter( lambda (k, v): k[0]==v[0] )
 .map( lambda (k, v): (k[0], (k[1], v[1])) ))
Run Code Online (Sandbox Code Playgroud)

dpe*_*ock 12

你只是在寻找一个简单的连接,例如

rdd = sc.parallelize([("red",20),("red",30),("blue", 100)])
rdd2 = sc.parallelize([("red",40),("red",50),("yellow", 10000)])
rdd.join(rdd2).collect()
# Gives [('red', (20, 40)), ('red', (20, 50)), ('red', (30, 40)), ('red', (30, 50))]
Run Code Online (Sandbox Code Playgroud)