2016-01-24 33 views
0

我正在使用Apache Spark處理Moby Word的列表,這裏是file。 予先使用該文本文件Apache Spark聯合方法給出莫名其妙的結果

lines = sc.textFile("words.txt") 

創建的RDD然後創建包含詞語2個RDDS具有「p」和「S」在他們

plines = lines.filter(lambda x: "p" in x) 
    slines = lines.filter(lambda x: "s" in x) 

,然後創建這兩個

的聯合
union_list = slines.union(plines) 

然後,我用「count」方法計算每個列表中的單詞數,並分別用slines,plines和union_list分別爲64803,22969和87772。 也64803 + 22969 = 87772,這意味着沒有「p」和「s」兩個詞。我創建包含以「P」 「S」字的新RDD使用

pslines = lines.filter(lambda x: ("p" in x) and ("s" in x)) 

並計數這給了13616的元素,然後創建包含詞語用「P」 新RDD「的」

newlist = lines.filter(lambda x: ("p" in x) or ("s" in x)) 

並計數這給了74156,這是有意義的原因64803 + 22969-13616 = 74156的元素。我在聯合方法上做了什麼錯誤?我在Windows 10和Python 3.5.1上使用Spark 1.6。

回答

2

union()方法不是一個聯合操作。它只是連接兩個RDD,所以交叉點將被計算兩次。如果你想真正的並集,您需要在您造成RDD運行distinct()

union_list = slines.union(plines).distinct()

相關問題