1.利用case特性,定义一个类,在类中进行排序

package day02import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}object UserOrdered01 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("UserOrdered01").setMaster("local[*]")val sc =new SparkContext(conf)val arr=Array("1,小马,22,200","2,老马,22,300","3,中马,23,200")val lines: RDD[String] = sc.makeRDD(arr)val userRDD = lines.map(line => {val fields = line.split(",")val id = fields(0).toIntval name = fields(1)val age = fields(2).toIntval salary = fields(3).toIntUser(id,name,age,salary)})val sorted = userRDD.sortBy(line=>line)sorted.collect().foreach(println(_))sc.stop()}
}
case class User(val id:Int,val name :String,val age:Int,val salary:Int) extends Ordered[User]{override def compare(that: User): Int = {if(this.age==that.age){that.salary -this.salary}else{this.age -that.age}}override def toString: String = s"User($id,$name,$age,$salary)"}

2.根据sortBy的特性

package day02import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD/*** 自定义排序规则* 利用sortBy不会改变数据类型,只会改变数据顺序来排序*/
object UserOrder02 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("UserOrdered01").setMaster("local[*]")val sc = new SparkContext(conf)val arr = Array("1,小马,22,200", "2,老马,22,300", "3,中马,23,200")val lines: RDD[String] = sc.makeRDD(arr)val userRDD = lines.map(line => {val fields = line.split(",")val id = fields(0).toIntval name = fields(1)val age = fields(2).toIntval salary = fields(3).toInt(id, name, age, salary)})//sortBy不会改变数据类型,,只会改变数据顺序(返回的还是元组)val sorted: RDD[(Int, String, Int, Int)] = userRDD.sortBy(t=>User2(t._1,t._2,t._3,t._4))sorted.collect().foreach(println(_))sc.stop()}
}
case class User2(val id:Int,val name :String,val age:Int,val salary:Int) extends Ordered[User2]{override def compare(that: User2): Int = {if(this.age==that.age){that.salary -this.salary}else{this.age -that.age}}
}

3.根据元组的特性

package day02import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD/*** 利用元组的比较特点来排序* 排序规则:age按照升序,salary按照降序*/
object UserOrder03 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("UserOrdered01").setMaster("local[*]")val sc = new SparkContext(conf)val arr = Array("1,小马,22,200", "2,老马,22,300", "3,中马,23,200")val lines: RDD[String] = sc.makeRDD(arr)val userRDD = lines.map(line => {val fields = line.split(",")val id = fields(0).toIntval name = fields(1)val age = fields(2).toIntval salary = fields(3).toInt(id, name, age, salary)})//利用元组的比较的特点,先比较第一个参数,如果不相等,按照第一个属性排序,//如果相等,则按照第二个参数进行排序val sorted = userRDD.sortBy(t=>(t._3,-t._4))sorted.collect().foreach(println(_))//关闭资源sc.stop()}
}

4.利用隐式转换

package day02import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD/*** 利用隐式转换进行排序*/
object UserOrder04 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("UserOrdered01").setMaster("local[*]")val sc = new SparkContext(conf)val arr = Array("1,小马,22,200", "2,老马,22,300", "3,中马,23,200")val lines: RDD[String] = sc.makeRDD(arr)val userRDD = lines.map(line => {val fields = line.split(",")val id = fields(0).toIntval name = fields(1)val age = fields(2).toIntval salary = fields(3).toInt(id, name, age, salary)})//隐式转换排序规则Ordering  调用Ordering中的on方法// def on[U](f : scala.Function1[U, T]) : scala.math.Ordering[U] =implicit val rules=Ordering[(Int,Int)].on[(Int,String,Int,Int)](t=>(t._3,-t._4))//自动根据类型进行匹配val sorted = userRDD.sortBy(user=>user)sorted.collect().foreach(println(_))//关闭资源sc.stop()}
}

Spark-Core自定义排序规则相关推荐

  1. 策略模式和自定义排序规则

    一.定义Person类模型 package cn.lesson8.statary;public class Person {private int id;private String name;pri ...

  2. Collections.sort()泛型集合排序的使用,和自定义类实现Comparable<T>接口重写compareTo(T o)方法完成Collections.sort()排序,以及自定义排序规则

    Collections算法类         1.Collections类是Java提供的一个集合操作工具类. 2.Collections类定义了一系列用于操作集合的静态方法,用于实现对集合元素的排序 ...

  3. 【自定义排序规则】剑指 Offer 45. 把数组排成最小的数

    我是小张同学,立志用更简洁的代码做更高效的表达 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "1 ...

  4. Cognos开发自定义排序规则的报表和自定义排名报表

    Cognos开发自定义排序规则的报表和自定义排名报表 场景:有一个简单的销售数据分析,可以按照日期,按照商品类型来分析订单笔数和订单金额. 目的:用户可以自定义查看按照不同指标排序的数据,用户可以查看 ...

  5. Java中Arrays.sort()的三种常用用法(自定义排序规则)

    Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序. 举例如下: import java.util.Arrays;public class Mai ...

  6. Python自定义排序规则:functools.cmp_to_key()

    Python自定义排序规则:functools.cmp_to_key() 使用场景 fuctools.cmp_to_key()是用来自定义排序规则,类似于C++中的lambada函数一样,使得sort ...

  7. vue+elementui 项目 table表格自定义排序规则

    vue+elementui 项目 table表格自定义排序规则 官方解释: 在列中设置 sortable 属性即可实现以该列为基准的排序,接受一个 Boolean,默认为 false.可以通过 Tab ...

  8. SQL自定义排序规则

    SQL自定义排序规则 原数据 结果顺序数据显示 Apply:提交请求 Review:等待回复 Finish:任务完成 按日期和状态排序,先状态为:提交请求(Apply)-按时间倒序,然后状态为:等待回 ...

  9. mysql之order by自定义排序规则进行排序(转载)

    1.问题描述 今天接到一个任务按照设备状态进行排序,课中>在线>离线,4是课中,0是在线,1是离线,所以排序规则是4,0,1没有规律,现在要进行排序. 2.上代码 SELECTdetail ...

最新文章

  1. Centos6.3下利用open***部署远程×××服务
  2. 基于Keras Application和Densenet迁移学习(transfer learning)的乳腺癌图像分类模型(良性、恶性)
  3. 初学者学习Python,掌握这些实用小技巧能快速入门!
  4. greenplum gpfdist应用
  5. PAT乙级 1023 组个最小数 (20 分)
  6. eclipse添加注释模板
  7. eclipse中MAVEN的web项目部署至TOMCAT的步骤
  8. 利用百度地图坐标拾取系统获取经纬度,并将其坐标转换保存成SHP文件
  9. 用HTML绘制三线表,CSS制作三线表 | 学步园
  10. 【资源分享】ppt的模版获取-可用于转正答辩、毕业答辩、课程答辩等等
  11. 转换函数(Transfer Function)设计
  12. php 微信代扣开发步骤,【微信支付】微信代扣开发者文档
  13. 安卓前端和python后端_在移动应用程序中结合html前端和python“后端”
  14. 悲剧的购物经历(附:最好不要买响尾蛇3G)
  15. 【208.11.21 直播QA】TI C2000 Piccolo单芯片——实现双轴伺服电机和马达控制
  16. Python基础必掌握的5种数据类型和8种内置函数基本操作
  17. 详解HTML的相对路径写法
  18. C语言语句篇-------赋值语句
  19. thinkpad T400 X301 X230 T510 w500 W530 dell6400 dell1420 e6320 e6420 M6800 X201expresscard扩展nvme盘
  20. 分布式任务调度平台XXL-JOB深度实战

热门文章

  1. HTTP返回码中301与302的区别
  2. 【问题记录】Office2019与Visio2016冲突
  3. http的post和get方法性能上的区别
  4. c语言中左移一位 由什么补充,计算机原理与基础 —— C语言中的左移与右移
  5. 如何将360全景图转成短视频
  6. Java Set集合的详解
  7. Win命令窗口设置中文chcp
  8. 华为的市场份额大幅倒退,OPPO和vivo未能趁机抢占市场
  9. 工信部教育与考试中心全国工业和信息化人才培养工程
  10. 中兴交换机怎么查看服务器,中兴交换机查看端口状态命令