说明
key-value类型的RDD,根据 key 进行排序,默认为 升序排列
排序后新产生的 RDD 分区数与原 RDD 的分区数一致,也可以修改分区数
中间有 shuffle 过程,各个分区的数据的数量是均衡的
相关算子: 是 sortBy() 的底层实现,图解详见 链接
声明
def sortByKey(ascending: Boolean = true, numPartitions: Int = self.partitions.length)
: RDD[(K, V)]
参数:
ascending:true升序,false降序
numPartitions:分区数量
源码
OrderedRDDFunctions 类,如下图:
使用 RangePartitioner 分区器
例子
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd:RDD[(String,Int)] = sc.makeRDD(Array(("baidu",100),("tengxun",210),("alibaba",200),("meituan",110)),2)
rdd.saveAsTextFile("res")
val resRDD:RDD[(String, Int)]=rdd.sortByKey()//升序
resRDD.saveAsTextFile("res2")
sc.stop()
打印例子
val sparConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparConf)
val rdd1:RDD[(String,Int)] = sc.makeRDD(Array(("baidu",100),("alibaba",200),("tengxun",210),("meituan",110)),2)
val resRDD:RDD[(String, Int)]=rdd1.sortByKey()//升序
resRDD.collect().foreach(println)
sc.stop()
执行结果:
(alibaba,200)
(baidu,100)
(meituan,110)
(tengxun,210)
