博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark 二次排序
阅读量:5986 次
发布时间:2019-06-20

本文共 2014 字,大约阅读时间需要 6 分钟。

hot3.png

需求:先按颜值降序排列,颜值相同,按照年龄升序排列

元数据

Array(("ningning", 90, 35), ("tingting", 90, 30), ("fangfang", 85, 19))

代码

package scalapackage.testsparkimport org.apache.spark.rdd.RDDimport org.apache.spark.{SparkConf, SparkContext}/**  * Created by Germmy on 2018/5/23.  */object MySort {  implicit val girlOrdering = new Ordering[Girl] {    override def compare(x: Girl, y: Girl): Int = {      if (x.faceVal != y.faceVal) {        x.faceVal - y.faceVal//按照颜值升序      } else {          y.age - x.age      }    }  }}object Test2CiPaixu {  def main(args: Array[String]) {    val sparkConf: SparkConf = new SparkConf().setAppName("Test2CiPaixu").setMaster("local[*]")    val sc: SparkContext = new SparkContext(sparkConf)    val girlInfo = sc.parallelize(Array(("ningning", 90, 35), ("tingting", 90, 30), ("fangfang", 85, 19)))    //    val by: RDD[(String, Int, Int)] = girlInfo.sortBy(_._3, false) //true升序,false降序    //    println(by.collect().toBuffer)     //方法一//    import MySort.girlOrdering//    val by: RDD[(String, Int, Int)] = girlInfo.sortBy(x => Girl(x._1, x._2, x._3), false) //期望结果:ArrayBuffer( (fangfang,85,19),(ningning,90,35), (tingting,90,30))//    println(by.collect().toBuffer) //期望结果:ArrayBuffer((fangfang,85,19), (tingting,90,30)),(ningning,90,35)         //方法二     val by: RDD[(String, Int, Int)] = girlInfo.sortBy(x => Girl(x._1, x._2, x._3), false) //期望结果:ArrayBuffer( (fangfang,85,19),(ningning,90,35), (tingting,90,30))    println(by.collect().toBuffer) //期望结果:ArrayBuffer((fangfang,85,19), (tingting,90,30)),(ningning,90,35)    sc.stop()  }}case class Girl(name: String, faceVal: Int, age: Int) extends  Ordered[Girl]{  override def compare(that: Girl): Int = {    if(this.faceVal!=that.faceVal){      this.faceVal-that.faceVal    }else{      that.age-this.age    }  }}

 

注意:

1、无论是ordering还是ordered,都是x-y或者this-that,正数表示谁权重大,比如颜值,谁权重大表示谁就排在后面;但是年纪,如果用x-y>0,则表示年纪越大谁权重大,这与需求违背,所以应该反过来,用y-x,则为负数了,表示它权重小。

2、sortBy方法,默认为true,表示升序,即权重越大的排在后面。因此如果你想让颜值高的先显示,则用降序

转载于:https://my.oschina.net/windows20/blog/1817717

你可能感兴趣的文章
模拟电路创新设计
查看>>
MD5的加密和解密(总结)
查看>>
Linux查看CPU和内存使用情况
查看>>
js中的延迟执行和定时执行
查看>>
Mysql基于GTID复制模式-运维小结 (完整篇)
查看>>
LaTeX技巧22:LaTeX文档中的参考文献初级
查看>>
Day6作业:计算器
查看>>
确认某端口占用情况并结束相应进程(Windows)
查看>>
锁_rac环境kill锁表会话后出现killed状态(解决)
查看>>
Java为何用xml做配置文件?
查看>>
[EasyUI美化换肤]更换EasyUi图标
查看>>
win10安装blueCFD
查看>>
C# 计算两个字符串的相似度
查看>>
linux 遇见错误Could not get lock /var/lib/dpkg/lock
查看>>
MySQLdump常用命令
查看>>
菜鸟运维笔记:安装与配置Apacheserver
查看>>
解决 E: Unable to correct problems, you have held broken packages. 问题
查看>>
UVA 11762 - Race to 1(概率)
查看>>
JavaWeb学习笔记:Tomcat
查看>>
Python使用matplotlib绘制三维曲线
查看>>