【问题标题】:Efficiency of flatMap vs map followed by reduce in Spark在 Spark 中 flatMap 与 map 的效率,然后是 reduce
【发布时间】:2016-07-18 06:21:06
【问题描述】:

我有一个包含多行文本的文本文件 sherlock.txt。我使用以下方法将其加载到 spark-shell 中:

val textFile = sc.textFile("sherlock.txt")

我的目的是统计文件中的字数。我遇到了两种替代方法来完成这项工作。

首先使用 flatMap:

textFile.flatMap(line => line.split(" ")).count()

第二次使用map,然后是reduce:

textFile.map(line => line.split(" ").size).reduce((a, b) => a + b)

两者都正确产生相同的结果。我想知道上述两种替代实现在时间和空间复杂度上的差异,如果确实有的话?

scala 解释器是否将两者都转换为最有效的形式?

【问题讨论】:

    标签: scala apache-spark mapreduce rdd flatmap


    【解决方案1】:

    我认为处理这个问题的最惯用的方法是mapsum

    textFile.map(_.split(" ").size).sum
    

    但最终总成本将由line.split(" ") 主导。

    您可以通过手动迭代字符串并计算连续的空格而不是构建新的Array 来做得更好,但我怀疑这是否值得大惊小怪。

    如果你喜欢更深入的了解count is defined as

    def count(): Long = sc.runJob(this, Utils.getIteratorSize _).sum  
    

    其中Utils.getIteratorSize 几乎是对Iterator 的简单迭代,其中一个和sum is equivalent to 相加

    _.fold(0.0)(_ + _)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2015-06-04
      相关资源
      最近更新 更多