Apache Spark联合方法给出了莫名其妙的结果

时间:2016-01-24 07:03:39

标签: python-3.x apache-spark pyspark

我使用Apache Spark玩Moby Word的列表,这里是file。 我首先使用这个文本文件

创建了一个RDD
    lines = sc.textFile("words.txt")

然后创建了两个包含" p"的单词的RDD。和" 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"。我创建了一个新的RDD,其中包含" p" " s"使用

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

并计算给出13616的元素,然后创建一个包含" p"的单词的新RDD。 " s"

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

并计算了给出74156的元素,有意义导致64803 + 22969-13616 = 74156. 我对union方法做了什么错误?我在Windows 10和Python 3.5.1上使用Spark 1.6。

1 个答案:

答案 0 :(得分:2)

union()方法不是set union操作。它只是连接两个RDD,因此交集将计算两次。如果您想要真正的集合联合,则需要在生成的RDD上运行distinct()

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