一、简介
spark中用于排序的算子主要有两个,sortByKey与sortBy,其中sortBy是引用sortByKey来实现的。下面主要对sortByKey算子进行分析,该方法的实现代码如下:
def sortByKey(ascending: Boolean = true, numPartitions: Int = self.partitions.length) : RDD[(K, V)] = self.withScope
{
val part = new RangePartitioner(numPartitions, self, ascending)
new ShuffledRDD[K, V, V](self, part)
.setKeyOrdering(if (ascending) ordering else ordering.reverse)
}
该方法的参数主要有两个,一是指定升降序排序,默认是true,二是指定分区数,默认是父rdd的分区数。实现该方法的代码很简短,一是指定shuffle时的partitioner,二是生成ShuffledRDD,并指定排序规则。
sortByKey方法,使用RangPartitioner,有shuffle操作,并做排序,无疑是一个很消耗性能的。并且要注意的一点,对于要排序的RDD[P], 要满足 P <: Product2[K, V],而如下
private val ordering = implicitly[Ordering[K]]
K类型要支持排序,详见scala.math的Ordered与Ordering类。
本文详细解析了Spark中用于排序的主要算子sortByKey的实现原理。介绍了其参数配置及内部实现机制,包括shuffle过程和分区策略,强调了数据类型需支持排序的要求。
594

被折叠的 条评论
为什么被折叠?



