0

输入文件包含 20 行。我正在尝试使用 reduce 函数计算记录总数。谁能解释一下为什么结果会有所不同?因为这里 y 的值只不过是 1。

默认分区数:4

scala> rdd = sc.textFile("D:\LearningPythonTomaszDenny\Codebase\\wholeTextFiles\\names1.txt")
scala> rdd.map(x=>1).reduce((acc,y) => acc+1)
res17: Int = 8

scala> rdd.map(x=>1).reduce((acc,y) => acc+y)
res18: Int = 20

4

1 回答 1

0

因为这里 y 的值只不过是 1。

那明显是错的。reduce由三个阶段组成(不是严格意义上的 Spark 含义):

  • 每个分区上的分布式减少。
  • 将部分结果收集到驱动程序(同步或异步,具体取决于后端)。
  • 本地驱动程序减少。

在您的情况下,第一阶段和第二阶段的结果将是相同的,但第一种方法将简单地忽略部分结果。换句话说,无论分区的结果如何,它总是只会加 1。

这种方法仅适用于非并行、非顺序的reduce实现。

于 2019-04-21T11:36:21.877 回答