2016-01-24 79 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()

相关问题