Spark学习笔记(8)——自定义排序

1 案例1

第一种方式

package mysort
import org.apache.spark.{SparkConf, SparkContext}
object CustomSort {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("CustomSort").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(("Anna", 99, 25, 1), ("Bob", 86, 23, 2), ("Candy", 89, 21, 2), ("Dautqi", 91, 20, 4),("Eve",99,19,5)))
    val rdd2 = rdd1.sortBy(x => Girl(x._2, x._3),false)
    println(rdd2.collect().toBuffer)
    sc.stop()

  }
}

//样例类,不用 new,
case class Girl(val faceValue: Int, val age: Int) extends Ordered[Girl] with Serializable {
  override def compare(that: Girl): Int = {
    if (this.faceValue == that.faceValue) {
      that.age - this.age
    } else {
      this.faceValue - that.faceValue
    }
  }
}
ArrayBuffer((Eve,99,19,5), (Anna,99,25,1), (Dautqi,91,20,4), (Candy,89,21,2), (Bob,86,23,2))

2 第二种方式

package mysort
import org.apache.spark.{SparkConf, SparkContext}
object OrderContext {
  implicit val girlOrding = 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
    }
  }
}

object CustomSort {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("CustomSort").setMaster("local[2]")
    val sc = new SparkContext(conf)
    val rdd1 = sc.parallelize(List(("Anna", 99, 25, 1), ("Bob", 86, 23, 2), ("Candy", 89, 21, 2), ("Dautqi", 91, 20, 4), ("Eve", 99, 19, 5)))

    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 {

}
ArrayBuffer((Eve,99,19,5), (Anna,99,25,1), (Dautqi,91,20,4), (Candy,89,21,2), (Bob,86,23,2))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值