Apache spark 如何使用python在spark中连接两个RDD?

Apache spark 如何使用python在spark中连接两个RDD?,apache-spark,join,pyspark,Apache Spark,Join,Pyspark,假设 rdd1 = ( (a, 1), (a, 2), (b, 1) ), rdd2 = ( (a, ?), (a, *), (c, .) ). 想要产生 ( (a, (1, ?)), (a, (1, *)), (a, (2, ?)), (a, (2, *)) ). 有什么简单的方法吗? 我认为它不同于交叉连接,但找不到好的解决方案。 我的解决办法是 (rdd1 .cartesian( rdd2 ) .filter( lambda (k, v): k[0]==v[0] ) .map(

假设

rdd1 = ( (a, 1), (a, 2), (b, 1) ),
rdd2 = ( (a, ?), (a, *), (c, .) ).
想要产生

( (a, (1, ?)), (a, (1, *)), (a, (2, ?)), (a, (2, *)) ).
有什么简单的方法吗? 我认为它不同于交叉连接,但找不到好的解决方案。 我的解决办法是

(rdd1
 .cartesian( rdd2 )
 .filter( lambda (k, v): k[0]==v[0] )
 .map( lambda (k, v): (k[0], (k[1], v[1])) ))

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

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

你所描述的实际上是一个自然连接。交叉连接只是一个笛卡尔积,这非常有用。非常感谢。