自定义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)    收藏  举报

导航