我已经查看了API,并找到以下两者的文档:
def reduceByKey(partitioner: Partitioner, func: (V, V) ⇒ V): RDD[(K, V)]
使用关联归约函数合并每个键的值。这也会在将结果发送到减速器之前,在每个映射器上本地执行合并,类似于MapReduce中的“组合器”。
def reduceByKeyLocally(func: (V, V) ⇒ V): Map[K, V]
该函数使用关联的reduce函数合并每个键的值,但将结果立即作为Map返回给主节点。这也会在每个mapper上本地执行合并,然后将结果发送到reducer,类似于MapReduce中的“combiner”。
我没有看出两者之间有太大的区别,除了reduceByKeyLocally将结果作为map返回给主节点。