如何在PySpark中区分两个RDD?

Dat*_*ted 4 mapreduce apache-spark rdd apache-spark-sql pyspark

我正在尝试建立一个队列研究来跟踪应用内用户行为,我想问你是否知道我如何从RDD 2中的RDD 2中排除一个元素.给定:

rdd1 = sc.parallelize([("a", "xoxo"), ("b", 4)])

rdd2 = sc.parallelize([("a", (2, "6play")), ("c", "bobo")])
Run Code Online (Sandbox Code Playgroud)

例如,要在rdd1和rdd2之间使用公共元素,我们只需要:

rdd1.join(rdd2).map(lambda (key, (values1, values2)) : (key, values2)).collect()
Run Code Online (Sandbox Code Playgroud)

这使 :

[('a', (2, '6play'))]
Run Code Online (Sandbox Code Playgroud)

因此,此连接将找到rdd1和rdd2之间的公共元素,并仅从rdd2获取键和值.我想做相反的事情:找到rdd2中的元素而不是rdd1中的元素,并仅从rdd2获取键和值.换句话说,我想从rdd2中获取rdd1中不存在的项目.所以预期的输出是:

("c", "bobo")
Run Code Online (Sandbox Code Playgroud)

想法?谢谢 :)

Dat*_*ted 9

我刚刚得到答案,这很简单!

rdd2.subtractByKey(rdd1).collect()
Run Code Online (Sandbox Code Playgroud)

请享用 :)