Uda*_*gar 2 scala apache-spark rdd
我查看了API并找到了以下文档 -
def reduceByKey(partitioner: Partitioner, func: (V, V) ? V): RDD[(K, V)]
Run Code Online (Sandbox Code Playgroud)
它使用关联reduce函数合并每个键的值.在将结果发送到reducer之前,这也将在每个映射器上本地执行合并,类似于MapReduce中的"组合器".
def reduceByKeyLocally(func: (V, V) ? V): Map[K, V]
Run Code Online (Sandbox Code Playgroud)
它使用关联reduce函数合并每个键的值,但会立即将结果作为Map返回到master.在将结果发送到reducer之前,这也将在每个映射器上本地执行合并,类似于MapReduce中的"组合器".
除了reduceByKeyLocally将结果作为地图返回给master之外,我认为两者之间没有太大区别.
差异很大.
使用时reduceByKey,对表示为a RDD,这意味着数据保持在集群之间分布.当您大规模操作时,这是必要的.
使用时reduceByKeyLocally,所有分区都会返回到主服务器,以便Map在该单个计算机上合并为单个分区.与collect动作类似Array,如果您正在大规模操作,则将所有内容都返回给主服务器,所有这些数据将完全压倒一台计算机,并且无法使用分布式数据抽象.
| 归档时间: |
|
| 查看次数: |
772 次 |
| 最近记录: |