Spark 自定义排序



Spark 自定义排序

第一种

package day02

import org.apache.spark.{SparkConf, SparkContext}

//sort=>规则 先按照faveValue  如果faveValue相等再比较age
//name faveValue  age
object User_D_Sort {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setAppName("UrlCount").setMaster("local[2]")
    val sc=new SparkContext(conf)
    val rdd1 = sc.parallelize(List(("yuihatano", 90, 28, 1), ("angelababy", 90, 27, 2),("JuJingYi", 95, 22, 3)))
      //val rdd2=rdd1.sortBy(x=>Girl(x._2,x._3),false)
    val rdd2=rdd1.sortBy(x=>Girl(x._2,x._3),true)
      println(rdd2.collect().toBuffer)
    }

}
//第一种方式
case class Girl(val favevalue:Int,val age:Int) extends  Ordered[Girl] with  Serializable{
  override def compare(that: Girl) : Int={
    if(this.favevalue==that.favevalue){
      that.age-this.age
    }else{
      this.favevalue-that.favevalue
    }
  }
}




第二种




import org.apache.spark.{SparkConf, SparkContext}


object OrderContext {
  implicit val girlOrdering  = new Ordering[Girl] {
    override def compare(x: Girl, y: Girl): Int = {
      if(x.faceValue > y.faceValue) 1
      else if (x.faceValue == y.faceValue) {
        if(x.age > y.age) -1 else 1
      } else -1
    }
  }
}



//sort =>规则 先按faveValue,比较年龄
//name,faveValue,age


object CustomSort {

  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("CustomSort").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(("yuihatano", 90, 28, 1), ("angelababy", 90, 27, 2),("JuJingYi", 95, 22, 3)))
    import OrderContext._
    val rdd2 = rdd1.sortBy(x => Girl(x._2, x._3), false)
    println(rdd2.collect().toBuffer)
    sc.stop()
  }

}



/**
  * 第二种,通过隐式转换完成排序
 /
case class Girl(faceValue: Int, age: Int) extends Serializable





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值