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))