import org.apache.spark.sql.SparkSession
import scala.util.Random
object TestSortBy {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("app").master("local[*]").getOrCreate()
val sc = spark.sparkContext
val rdd = sc.parallelize(1 to 100)
val radmomRdd = rdd.map(i => i + 34)//增加随机数
// radmomRdd.sortBy(i => i, true).foreach(i => print(i + ","))
// radmomRdd.sortBy(i => i, true).mapPartitionsWithIndex((idx, iter)=>{
// println("partitionIndex" + idx + " " + iter.mkString(","))
// iter
// }).collect()
// 0. 直接sortBy,各分区内有序,全局可以看到是无序的
radmomRdd.sortBy(i => i, false).foreach(i => print(i + ","))
println("")
// 1. collect方法可以将RDD类型的数据转化为数组,同时会从远程集群是拉取数据到driver端。
// 属于先局部有序,再分区(合成1个区)
radmomRdd.sortBy(i => i, false).collect().foreach(i => print(i + ","))
println("")
// 2.sortBy()函数的源码,其本质也是用到了sortByKey()函数
radmomRdd.sortBy(i => i, false,1).foreach(i => print(i + ","))
println("")
// 3.
radmomRdd.zipWithIndex().sortByKey(false,1).foreach(i => print(i._1 + ","))
println("")
// 4.先分区,后局部有序,效率不如上面
//radmomRdd.repartition(1).sortBy(i => i, false).foreach(i => print(i + ","))
}
}