自定义sort
package spark2021 import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDD object Ordered_Test { def main(args: Array[String]): Unit = { //1.初始化sparkcontext,spark程序入口 val conf: SparkConf = new SparkConf().setAppName("").setMaster("local[2]") val sc: SparkContext = new SparkContext(conf) //2.创建数组 val girl: Array[String] = Array("reba,18,80","mimi,22,70","liya,30,80","jingtian,18,85") //3.转换RDD val grdd1: RDD[String] = sc.parallelize(girl) //sortBy进行排序 val grdd2 = grdd1.map(line => { val field: Array[String] = line.split(",") val name = field(0) val age = field(1).toInt val weight = field(2).toInt val sort = Girl(name,age,weight) sort } ) val sortBy_rdd: RDD[Girl] = grdd2.sortBy(x=>x) sortBy_rdd.collect().foreach(println) } } case class Girl(val name:String,val age:Int,val weight:Int) extends Ordered[Girl] with Serializable{ override def compare(that: Girl): Int = { //年龄升序,体重降序 if (this.age == that.age){ //如果正数升序 负数倒序 -(this.weight - that.weight) }else{ this.age -that.age } } override def toString: String = s"$name,$age,$weight" } //jingtian,18,85 //reba,18,80 //mimi,22,70 //liya,30,80
package spark2021 import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDD object Ordered_Test2 { def main(args: Array[String]): Unit = { //1.初始化sparkcontext,spark程序入口 val conf: SparkConf = new SparkConf().setAppName("").setMaster("local[2]") val sc: SparkContext = new SparkContext(conf) //2.创建数组 val girl: Array[String] = Array("reba,18,80","mimi,22,70","liya,30,80","jingtian,18,85") //3.转换RDD val grdd1: RDD[String] = sc.parallelize(girl) //SortbyKey val grdd3 = grdd1.map(line => { val field: Array[String] = line.split(",") val name = field(0) val age = field(1).toInt val weight = field(2).toInt val sort_ByKey = Boy(age,weight) (sort_ByKey,name) } ) val sortByKey_rdd: RDD[(Boy, String)] = grdd3.sortByKey() sortByKey_rdd.collect().foreach(println) } } case class Boy(val age:Int,val weight:Int) extends Ordered[Boy] with Serializable{ override def compare(that: Boy): Int = { //年龄升序,体重降序 if (this.age == that.age){ //如果正数升序 负数倒序 -(this.weight - that.weight) }else{ this.age -that.age } } override def toString: String = s"$age,$weight" } //(18,85,jingtian) //(18,80,reba) //(22,70,mimi) //(30,80,liya)
posted on 2021-01-04 19:02 happygril3 阅读(63) 评论(0) 收藏 举报
浙公网安备 33010602011771号