Scala聚合函数与Spark RDD聚合函数
以下是该函数的定义: 斯卡拉:Scala聚合函数与Spark RDD聚合函数,scala,apache-spark,aggregate-functions,lazy-evaluation,Scala,Apache Spark,Aggregate Functions,Lazy Evaluation,以下是该函数的定义: 斯卡拉: 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中
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中的z参数是渴望格式?首先,这是Scala中的一个按名称调用的参数。这意味着每次使用它们时都会对其进行求值,这与lazy不同,后者在第一次使用时只对其求值一次,并且所有后续调用都使用该结果。()
因此spark依赖于分布式数据集,这意味着可以在多个节点上进行计算。我认为他们选择了零元素,一个按值调用的参数(你称之为“渴望”),避免在执行此计算的每个节点上重新计算它。可以肯定的是,所有转换都与Spark的底层架构有关。这也可能是为了简化Java的调用。我认为它不一定与Spark的底层架构有关,因为其他转换如fold在Scala和Spark RDD中具有相同的定义。那么,总的来说,有什么特别之处呢?