如果我将散列分区程序应用于Spark的aggregatebykey函数,即myRDD.aggregateByKey(0, new HashPartitioner(20))(combOp, mergeOp)
在使用combOp和mergeOp聚合键/值对之前,是否先重新分配myRDD?或者myRDD是否首先通过combOp和mergeOp,并使用HashPartitioner重新分配生成的RDD?
答案 0 :(得分:2)
aggregateByKey
在最终shuffle之前应用地图侧聚合。由于每个分区都是按顺序处理的,因此在此阶段应用的唯一操作是初始化(创建zeroValue
)和combOp
。 mergeOp
的目标是组合聚合缓冲区,以便在shuffle之前不使用它。
如果输入RDD是ShuffledRDD
,并且具有与aggregateByKey
所请求的分区相同的分区,那么根本不会对数据进行混洗,并使用mapPartitions
在本地聚合数据。