Spark Aggregatebykey分区程序

时间:2016-01-25 04:15:29

标签: scala apache-spark rdd

如果我将散列分区程序应用于Spark的aggregatebykey函数,即myRDD.aggregateByKey(0, new HashPartitioner(20))(combOp, mergeOp)

在使用combOp和mergeOp聚合键/值对之前,是否先重新分配myRDD?或者myRDD是否首先通过combOp和mergeOp,并使用HashPartitioner重新分配生成的RDD?

1 个答案:

答案 0 :(得分:2)

aggregateByKey在最终shuffle之前应用地图侧聚合。由于每个分区都是按顺序处理的,因此在此阶段应用的唯一操作是初始化(创建zeroValue)和combOpmergeOp的目标是组合聚合缓冲区,以便在shuffle之前不使用它。

如果输入RDD是ShuffledRDD,并且具有与aggregateByKey所请求的分区相同的分区,那么根本不会对数据进行混洗,并使用mapPartitions在本地聚合数据。