我使用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。
答案 0 :(得分:2)
union()方法不是set union操作。它只是连接两个RDD,因此交集将计算两次。如果您想要真正的集合联合,则需要在生成的RDD上运行distinct():
union_list = slines.union(plines).distinct()