如何在PySpark中获得两个RDD之间的区别?

时间:2016-11-17 14:17:04

标签: apache-spark mapreduce pyspark apache-spark-sql rdd

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

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

rdd2 = sc.parallelize([("a", (2, "6play")), ("c", "bobo")])

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

rdd1.join(rdd2).map(lambda (key, (values1, values2)) : (key, values2)).collect()

给出了:

[('a', (2, '6play'))]

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

("c", "bobo")

想法?谢谢:))

1 个答案:

答案 0 :(得分:9)

我得到了答案,而且非常简单!

rdd2.subtractByKey(rdd1).collect()

享受:)