【发布时间】:2016-06-08 11:52:19
【问题描述】:
例如,我在 PySpark 中有两个 RDD:
((0,0), 1)
((0,1), 2)
((1,0), 3)
((1,1), 4)
第二个就是
((0,1), 3)
((1,1), 0)
我希望第一个 RDD 与第二个 RDD 有交集。实际上,第二个 RDD 必须为第一个 RDD 扮演掩码的角色。输出应该是:
((0,1), 2)
((1,1), 4)
它表示来自第一个 RDD 的值,但仅适用于来自第二个 RDD 的键。两个RDD的长度不同。
我有一些解决方案(必须证明),但是是这样的:
rdd3 = rdd1.cartesian(rdd2)
rdd4 = rdd3.filter(lambda((key1, val1), (key2, val2)): key1 == key2)
rdd5 = rdd4.map(lambda((key1, val1), (key2, val2)): (key1, val1))
我不知道,这个解决方案的效率如何。想听听经验丰富的 Spark 程序员的意见....
【问题讨论】: