spark3.0教程:RDD转换算子sortByKey()排序

说明

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)

原文出处:/show_1IX1NwK0602J.html