Scala聚合函数 vs. Spark RDD聚合函数

3

以下为函数定义:

Scala:

aggregate[B](z: => B)(seqop: (B, A) => B, combop: (B, B) => B): B

Spark RDD:

aggregate[B](z: B)(seqop: (B, A) => B, combop: (B, B) => B): B

我知道Scala的聚合函数是为并行集合设计的,而Spark RDD的聚合函数是为分布式集合设计的。

但是,为什么Scala中的z参数是以惰性格式呈现的,而在Spark RDD中是以急切格式呈现的?


1
非常确定这与Spark的底层架构有关,所有转换都是惰性操作 - Leo C
这也可能是为了简化从Java的调用。 - Luis Miguel Mejía Suárez
我认为这与Spark的底层架构并没有必然的关系,因为其他转换(如fold)在Scala和Spark RDD中具有相同的定义。那么,aggregate有什么特别之处呢? - Tomer
1个回答

0

首先,这是Scala中的一个按名称调用参数。这意味着它们在每次使用时都会被评估,这与惰性不同,后者仅在第一次使用时评估一次,并且所有后续调用都使用该结果。(https://docs.scala-lang.org/tour/by-name-parameters.html

因此,Spark依赖于分布式数据集,这意味着可以在多个节点上进行计算。我认为他们选择将零元素作为按值调用参数(你所说的“急切”),以避免在执行此计算的每个节点上重新计算它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接