一、简介
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类。