【问题标题】:Apache Spark union method giving inexplicable resultApache Spark union 方法给出莫名其妙的结果
【发布时间】:2016-01-24 07:03:38
【问题描述】:

我正在使用 Apache Spark 玩 Moby Word 的列表,这里是 file。 我首先使用这个文本文件创建了一个 RDD

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

然后创建了两个包含“p”和“s”的词的RDD

    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”and”的单词s" 使用

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

并计算给出13616的元素,然后创建一个新的RDD,其中包含带有“p”“s”的单词

    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。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-12
      • 2016-05-16
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      相关资源
      最近更新 更多