一、Spark的几种排序方式
(1)直接根据字段进行排序 弊端:如果字段太多不便于使用
(2)封装一个类,实现它的Ordered 弊端:用自定义实现序列化方式比较麻烦
(3)用case class的方式排序 推荐:不用new、默认就实现了序列化
(4)最简单的排序方式Ordering on
二、Spark最简单的一种排序方式Ordering on
package com.ruozedata.bigdata.spark.core02
import com.ruozedata.bigdata.spark.utils.ContextUtils
import com.ruozedata.bigdata.spark.utils.ImplicitAspect._
object SortApp {
def main(args: Array[String]): Unit = {
val sc = ContextUtils.getContext(this.getClass.getSimpleName)
val products = sc.parallelize(List("啤酒 20 10","红酒 20 100","白酒 5 200"))
val product = products.map(x => {
val splits = x.split(" ")
val name = splits(0)
val price = splits(1).toDouble
val amount = splits(2).toInt
(name, price, amount)
})
/**
* Ordering on
*
* -x._2, -x._3 排序规则
* (Double,Int) 定义的是规则的返回值的类型
* (String,Double,Int) 数据的类型
*/
implicit val ord = Ordering[(Double,Int)].on[(String,Double,Int)](x=>(-x._2, -x._3))
product.sortBy(x=>x).printInfo()
sc.stop()
}
}
输出的结果
(红酒,20.0,100)
(啤酒,20.0,10)
(白酒,5.0,200)
~~~~~~~~~~~~~~~~~~~