就比较新的Spark来说,题主要找的 RDD 层面的 sortByKey() 实现在Spark的 shuffle 当中的。
sortByKey() 采用的是tera-sort风格的实现,其自身包含一个使用range partitioning的shuffle操作。
Stage 0:Sample。创建 RangePartitioner,先对输入的数据的key做sampling来估算key的分布情况,然后按指定的排序切分出range,尽可能让每个partition对应的range里的key的数量均匀。计算出来的 rangeBounds 是一个长为 numPartitions - 1 的Array[TKey],记录前 nu