如何通过pyspark中的键找到两个rdd的交集?

时间:2015-12-10 07:25:00

标签: python apache-spark pyspark

我有两个rdds:

rdd1 = sc.parallelize([("www.page1.html", "word1"), ("www.page2.html", "word1"), 
    ("www.page1.html", "word3")])

rdd2 = sc.parallelize([("www.page1.html", 7.3), ("www.page2.html", 1.25), 
    ("www.page3.html", 5.41)])

intersection_rdd = rdd1.keys().intersection(rdd2.keys())       

//当我这样做时,我只得到了一个密钥,即(www.page1.html,www.page2.html)。

但我需要键和两个rdds的值。 输出应如下所示:

[www.page1.html, (word1, word3, 7.3)]

[www.page2.html, (word1, 1.25)]

2 个答案:

答案 0 :(得分:5)

您可以举例说明cogroup并过滤:

## This depends on empty resultiterable.ResultIterable
## evaluating to False

intersection_rdd = rdd1.cogroup(rdd2).filter(lambda x: x[1][0] and x[1][1])
intersection_rdd.map(lambda x: (x[0], (list(x[1][0]), list(x[1][1])))).collect()

## [('www.page1.html', (['word1', 'word3'], [7.3])),
##  ('www.page2.html', (['word1'], [1.25]))]

答案 1 :(得分:0)

由于您仅对键使用set操作,因此输出仅包含键。

echo

Union GroupByKey

('www.page1.html','word1')(''page1.html',['word1','word3',7.3])
('www.page2.html','word1')('www.page2.html',['word1',1.25])
('www.page1.html','word3')('www.page3.html',[5.41])
('www.page1.html',7.3)
('www.page2.html',1.25)
('www.page3.html',5.41)