自定义排序

数据以bean类型为例

第一种 bean类是class 实现 Comparable 重写compareTo方法进行排序 由于在Driver端所以bean需要实现序列化 进行传输

package cn.spark.customSortimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object CustomSort1 {def main(args: Array[String]): Unit = {//是否本地运行val isLocal:Boolean = args(0).toBooleanval conf = new SparkConf().setAppName(this.getClass.getSimpleName)if (isLocal){conf.setMaster("local[*]")}//创建SparkCongtext对象val sc: SparkContext = new SparkContext(conf)//创建RDD对象,导入一些数据val stair: RDD[String] = sc.makeRDD(List("xiaocang,22,99.99", "xiaobo,23,999.99", "xiaosan,24,989.99", "xiaoxiang,25,980.99"))//将数据切割存入bean中val stairGilr: RDD[StairGirl1] = stair.map(line => {//按,切割val floed = line.split(",")val name = floed(0)val age = floed(1).toIntval fv = floed(2).toDoublenew StairGirl1(name,age,fv)})val res = stairGilr.sortBy(s => s)//打印println(res.collect().toBuffer)//关闭资源sc.stop()}
}
package cn.spark.customSortclass StairGirl1 (var name: String , var age: Int , var fv: Double ) extends  Comparable[StairGirl1] with Serializable {
//重写compareTo方法override def compareTo(o: StairGirl1): Int = {//如果颜值相等按年龄排序if (this.fv==o.fv){this.age - o.age}else{(o.fv-this.fv).toInt}}override def toString = s"StairGirl1($name, $age, $fv)"
}

第二种 bean是case class 实现Ordered方法compare进行排序 case class内有序列化和toString方法

package cn.spark.customSortimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object CustomSort1 {def main(args: Array[String]): Unit = {//是否本地运行val isLocal:Boolean = args(0).toBooleanval conf = new SparkConf().setAppName(this.getClass.getSimpleName)if (isLocal){conf.setMaster("local[*]")}//创建SparkCongtext对象val sc: SparkContext = new SparkContext(conf)//创建RDD对象,导入一些数据val stair: RDD[String] = sc.makeRDD(List("xiaocang,22,99.99", "xiaobo,23,999.99", "xiaosan,24,989.99", "xiaoxiang,25,980.99"))//将数据切割存入bean中val stairGilr: RDD[StairGirl1] = stair.map(line => {//按,切割val floed = line.split(",")val name = floed(0)val age = floed(1).toIntval fv = floed(2).toDoublenew StairGirl1(name,age,fv)})val res = stairGilr.sortBy(s => s)//打印println(res.collect().toBuffer)//关闭资源sc.stop()}
}
package cn.spark.customSort
/*** 实现Ordered方法排序* case内有序列化和toString方法*/
case class StairGirl(var name : String,var age : Int,var fv : Double)extends Ordered[StairGirl]{override def compare(that: StairGirl): Int = {//如果颜值相等按年龄排序if (this.fv==that.fv){this.age - that.age}else{(that.fv-this.fv).toInt}}
}

第三种 bean是case class 不继承任何排序 sortBy方法中可以传入隐式参数 进行排序

package cn.spark.customSortimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object CustomSort3 {def main(args: Array[String]): Unit = {//是否本地运行val isLocal:Boolean = args(0).toBooleanval conf = new SparkConf().setAppName(this.getClass.getSimpleName)if (isLocal){conf.setMaster("local[*]")}//创建SparkCongtext对象val sc: SparkContext = new SparkContext(conf)//创建RDD对象,导入一些数据val stair: RDD[String] = sc.makeRDD(List("xiaocang,22,99.99", "xiaobo,23,999.99", "xiaosan,24,989.99", "xiaoxiang,25,980.99"))//将数据切割存入bean中val stairGilr: RDD[StairGirl2] = stair.map(line => {//按,切割val floed = line.split(",")val name = floed(0)val age = floed(1).toIntval fv = floed(2).toDoubleStairGirl2(name,age,fv)})//导入隐式参数进行排序import MyContext.OrderGirlval res: RDD[StairGirl2] = stairGilr.sortBy(s => s)//打印println(res.collect().toBuffer)//关闭资源sc.stop()}
}
package cn.spark.customSortobject MyContext {implicit object OrderGirl extends  Ordering[StairGirl2]{override def compare(x: StairGirl2, y: StairGirl2): Int = {if (x.fv==y.fv){x.age - y.age}else{(y.fv-x.fv).toInt}}}
}
package cn.spark.customSortcase class StairGirl2(var name : String,var age : Int,var fv : Double)

第四种 利用元组的内排序规则

package cn.spark.customSortimport org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object CustomSort4 {def main(args: Array[String]): Unit = {//是否本地运行val isLocal:Boolean = args(0).toBooleanval conf = new SparkConf().setAppName(this.getClass.getSimpleName)if (isLocal){conf.setMaster("local[*]")}//创建SparkCongtext对象val sc: SparkContext = new SparkContext(conf)//创建RDD对象,导入一些数据val stair: RDD[String] = sc.makeRDD(List("xiaocang,22,99.99", "xiaobo,23,999.99", "xiaosan,24,989.99", "xiaoxiang,25,980.99"))//将数据切割存入bean中val stairGilr: RDD[(String, Int, Double)] = stair.map(line => {//按,切割val floed = line.split(",")val name = floed(0)val age = floed(1).toIntval fv = floed(2).toDouble(name,age,fv)})val res = stairGilr.sortBy(t => (-t._3, t._2))//打印println(res.collect().toBuffer)//关闭资源sc.stop()}
}

SPARK 笔记 (四) 自定义排序相关推荐

  1. 《我的PaddlePaddle学习之路》笔记四——自定义图像数据集的识别

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 *本篇文章基于 Paddle ...

  2. 微信小程序学习笔记(四)自定义组件

    文章目录 1. 组件的创建与引用 1.1 创建组件 1.2 引用组件 1.3 全局引用 VS 局部引用 1.4 组件和页面的区别 2. 样式 2.1 组件样式隔离 2.2 修改组件的样式隔离选项 3. ...

  3. [Android学习笔记四] 自定义Android组件之组合方式创建密码框组件

    Android中所有控件(也称组件)都继承自adnroid.view.View类,android.view.ViewGroup是View类的重要子类,绝大多书的布局类就继承自ViewGroup类. 参 ...

  4. Spark-Core自定义排序规则

    1.利用case特性,定义一个类,在类中进行排序 package day02import org.apache.spark.rdd.RDD import org.apache.spark.{Spark ...

  5. mysql中文排序,自定义排序(一科,二科,三科,四科等等)

    mysql中文排序,自定义排序(一科,二科,三科,四科等等) 1.背景: 当我们在使用sql进行查询时,想让查询结果按照自己想要的顺序输出时,可以考虑使用mysql的自定义排序方法. 2.sql如下: ...

  6. JAVA集合四:比较器--类自定义排序

    参考链接: HOW2J.CN 前言 对于JAVA集合,都能够用集合的工具类Collections 提供的方法: Collections.sort(List list) Collections.sort ...

  7. Spark自定义排序

    1 当rdd是键值对的时候可以使用sortByKey进行排序,按照key进行排序,可以指定升序和降序 2 sortBy自定义字段进行排序 3 还可以在自定义类型时,继承Ordered,重写方法进行排序 ...

  8. 【Excel2019(四):排序与筛选】【简单+复杂+自定义(+高级)】

    上一篇:[Excel2019(三):查找.替换与定位][查找与替换+定位工具] 文章目录 1. 排序 1.1 简单排序 1.2 复杂排序 1.3 自定义排序 1.4 利用排序,打印工资条 2. 筛选 ...

  9. Spark笔记——技术点汇总

    Spark笔记--技术点汇总 目录 · 概况 · 手工搭建集群 · 引言 · 安装Scala · 配置文件 · 启动与测试 · 应用部署 · 部署架构 · 应用程序部署 · 核心原理 · RDD概念 ...

最新文章

  1. VS2019遇到的坑——C4716
  2. mysql1045_win10系统登录mysql时报错1045的解决方案
  3. 下载并配置完dex-net,在CLI中执行相应操作命令报错解决
  4. 一款监控网络状态的好工具- Smokeping
  5. r数据框计算字符出现次数_R语言系列第二期:①R变量、脚本、作图等模块介绍...
  6. 具有Spring Boot和数据功能的Java头优先弹性搜索
  7. java.io.FileNotFoundException:/mnt/sdcard/......(Permission denied)
  8. 「leetcode」973. 最接近原点的 K 个点【优先级队列】详解
  9. Android-Intent界面跳转
  10. Sublime text 3 注册码激活码 版本号3143
  11. java中的math pow,Java Math.pow(a,b)时间复杂度
  12. 用pdftocairo将PDF图片转成svg矢量图
  13. 2016.3.24 OneZero站立会议
  14. python和jsp哪个好学_Python,Java和JavaScript,学哪个编程语言好就业?
  15. poj2391 Ombrophobic Bovines 拆点连边要注意
  16. 唐宇迪学习笔记3:Python数据可视化库——Matplotlib
  17. 海康机器人线激光立体相机获取体积测量开始时间点和结束测量时间点以及包裹四个顶角位置信息的可行办法
  18. brpc-client
  19. Java连接MySQL数据库并进行简单查询
  20. html版心怎么设置,怎样设置Word版心啊?

热门文章

  1. Swift 2.2 的新特性
  2. JAVASE 面向对象
  3. dst发育筛查有意义吗_[单选] ()不是DDST发育筛查法的特点。
  4. 赚钱 36 计 - 第九计:入口计
  5. Vue3中实现路由跳转的过渡动画(一)
  6. 【重装系统】正版Windows系统重装总结
  7. 蓝桥杯嵌入式学习STM32之外部中断EXTI详解
  8. Python之CMDB资产管理系统
  9. 青龙扩展项目---电视家
  10. 1086 就不告诉你 (15 分)