了解reduceByKey函数定义Spark Scala

rga*_*ber 3 scala apache-spark

in spark 的reduceByKey函数Pair RDD具有以下定义:

def reduceByKey(func: (V, V) => V): RDD[(K, V)]
Run Code Online (Sandbox Code Playgroud)

我理解reduceByKey采用参数函数将其应用于键的值.我想要了解的是如何阅读这个定义,其中函数将2个值作为输入,即(V, V) => V.不应该是V => V,就像mapValues函数在值V上应用函数来生成U,它是相同或不同类型的值:

def mapValues[U](f: (V) ? U): RDD[(K, U)]
Run Code Online (Sandbox Code Playgroud)

这是因为reduceByKey同时应用于所有值(对于相同的键),并且一次mapValues一个地应用于每个值(不管键),在这种情况下不应该被定义为类似(V1, V2) => V

Alb*_*nto 6

......不应该是V => V,就像mapValues一样......

不,他们完全不同.回想一下,有在不变的map功能,它们返回Iterable(List,Array,等)具有相同length的原始列表(映射的一个).另一方面,reduce函数聚合组合所有元素,在这种情况下reduceByKey是应用函数的组合对或值,该定义来自称为monoid的数学概念.你可以这样看,你通过应用函数组合列表的两个第一个元素,并且该操作的结果应该是第一个元素的相同类型,用第三个元素操作,依此类推,直到你最终只有一个元素.