Spark Aggregatebykey 分区顺序
Spark Aggregatebykey partitioner order
如果我将哈希分区器应用于 Spark 的 aggregatebykey 函数,即 myRDD.aggregateByKey(0, new HashPartitioner(20))(combOp, mergeOp)
myRDD 在 key/value 对使用 combOp 和 mergeOp 聚合之前是否先重新分区?还是 myRDD 先经过 combOp 和 mergeOp,然后使用 HashPartitioner 对生成的 RDD 进行重新分区?
aggregateByKey
在最终洗牌之前应用地图端聚合。由于每个分区都是按顺序处理的,因此在此阶段应用的唯一操作是初始化(创建 zeroValue
)和 combOp
。 mergeOp
的目标是合并聚合缓冲区,以便在随机播放之前不使用它。
如果输入 RDD 是一个 ShuffledRDD
,具有与 aggregateByKey
所请求的相同的分区器,那么数据根本不会被打乱,而是使用 mapPartitions
在本地聚合数据。
如果我将哈希分区器应用于 Spark 的 aggregatebykey 函数,即 myRDD.aggregateByKey(0, new HashPartitioner(20))(combOp, mergeOp)
myRDD 在 key/value 对使用 combOp 和 mergeOp 聚合之前是否先重新分区?还是 myRDD 先经过 combOp 和 mergeOp,然后使用 HashPartitioner 对生成的 RDD 进行重新分区?
aggregateByKey
在最终洗牌之前应用地图端聚合。由于每个分区都是按顺序处理的,因此在此阶段应用的唯一操作是初始化(创建 zeroValue
)和 combOp
。 mergeOp
的目标是合并聚合缓冲区,以便在随机播放之前不使用它。
如果输入 RDD 是一个 ShuffledRDD
,具有与 aggregateByKey
所请求的相同的分区器,那么数据根本不会被打乱,而是使用 mapPartitions
在本地聚合数据。