spark中对RDD的数据进行排序有两种方法:
一种就是sortByKey,也就是我们熟知的根据key值进行排序。
另外一种时sortBy,这个就是根据我们的需要自己写根据那个值排序。比如我们对wordcount的结果进行排序,除了将(key,value)倒过来根据key排序外,我们可以直接用sortBy.
用法如下:
第一个参数是一个函数,该函数的也有一个带T泛型的参数,返回类型和RDD中元素的类型是一致的;
第二个参数是ascending,从字面的意思大家应该可以猜到,是的,这参数决定排序后RDD中的元素是升序还是降序,默认是true,也就是升序;
第三个参数是numPartitions,该参数决定排序后的RDD的分区个数,默认排序后的分区个数和排序之前的个数相等,即为this.partitions.size。
val sparkConf = new SparkConf().setMaster("local").setAppName("test")
val sc = new SparkContext(sparkConf)
// val data = sc.parallelize(List("a","b","c"))
val data = sc.textFile("E:\\yisa_oe\\data\\data.txt",1)
val res = data.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)
//根据value排序
val sortBy = res.sortBy(x=> x._2,false)
//根据key排序
// val sortData = res.map(x=>(x._2,x._1))sortByKey (false)
// sortData.collect().foreach(println)
sortBy.collect().foreach(println)
sc.stop()