获取出现在所有rdd Pysp中的项

2024-04-25 07:22:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我是spark的新手,我正在尝试筛选一个最终的rdd,其中包含出现在所有其他rdd中的项。你知道吗

我的代码

a = ['rs1','rs2','rs3','rs4','rs5']
b = ['rs3','rs7','rs10','rs4','rs6']
c = ['rs10','rs13','rs20','rs16','rs1']
d = ['rs2', 'rs4', 'rs5', 'rs13', 'rs3']

a_rdd = spark.parallelize(a)
b_rdd = spark.parallelize(b)
c_rdd = spark.parallelize(c)
d_rdd = spark.parallelize(d)

rdd = spark.union([a_rdd, b_rdd, c_rdd, d_rdd]).distinct()

结果:['rs4'、'rs16'、'rs5'、'rs6'、'rs7'、'rs20'、'rs1'、'rs13'、'rs10'、'rs2'、'rs3']

我的预期结果是['rs3','rs4']

谢谢你!!!你知道吗


Tags: sparkrdd新手parallelizers3rs2rs1rs7
1条回答
网友
1楼 · 发布于 2024-04-25 07:22:35

当你说你想要一个rdd包含所有rdd中的项目时,你的意思是交集?如果是这种情况,您不应该使用并集,并且RDD的交集是空的(在您的4个RDD中没有重复的元素)

但是如果你需要交叉你的RDD:

    def intersection(*args):
         return reduce(lambda x,y:x.intersection(y),args)

    a = ['rs1','rs2','rs3','rs4','rs5']
    b = ['rs3','rs7','rs1','rs2','rs6']
    c = ['rs10','rs13','rs2','rs16','rs1']
    d = ['rs2', 'rs4', 'rs1', 'rs13', 'rs3']

    a_rdd = sc.parallelize(a)
    b_rdd = sc.parallelize(b)
    c_rdd = sc.parallelize(c)
    d_rdd = sc.parallelize(d)

    rdd = sc.union([a_rdd, b_rdd, c_rdd, d_rdd]).distinct()
    intersection(a_rdd, b_rdd, c_rdd, d_rdd).collect()

输出为['rs1','rs2']

相关问题 更多 >