一.代码实现

 package big.data.analyse.scala.secondsort

 import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession /** 二次排序
* Created by zhen on 2019/5/29.
*/
class SecondSortByKey(val first:Int,val second:Int) extends Ordered[SecondSortByKey] with Serializable{
def compare(other : SecondSortByKey): Int ={
if(this.first - other.first != 0){//正序
this.first - other.first
}else{//倒序
other.second - this.second
}
}
}
object SecondSortByKey{
/**
* 设置日志级别
*/
Logger.getLogger("org").setLevel(Level.WARN)
def main(args: Array[String]) {
val spark = SparkSession
.builder()
.appName("SecondSortByKey")
.master("local[2]")
.getOrCreate()
val sc = spark.sparkContext
val rows = sc.textFile("src/big/data/analyse/scala/secondsort/sort.txt") val pairWithSortByKey = rows
.filter(row=>row.split(" ").length==3)//过滤错误的数据
.map(row=>{
val array = row.split(" ")
(new SecondSortByKey(array(0).toInt,array(1).toInt),row)
})
println("先正序后倒序")
pairWithSortByKey
.sortByKey(true) // 排序,true:先正序后倒序,false:先倒序后正序
.map(map => map._2)
.collect()
.foreach(println)
println("先倒序后正序")
pairWithSortByKey
.sortByKey(false) // 排序,true:先正序后倒序,false:先倒序后正序
.map(map => map._2)
.collect()
.foreach(println) sc.stop()
}
}

二.结果

先正序后倒序
1 9 ES
1 8 HBase
2 4 Tachyon日渐成熟
2 3 《黑豹》异军突起
2 3 Radis
3 3 HDFS
3 3 搜索引擎
5 3 spark发布2.4版本,性能提升巨大
5 2 《复仇者联盟3:无限战争》火热上映
6 3 Maven
7 2 Solr
先倒序后正序
7 2 Solr
6 3 Maven
5 2 《复仇者联盟3:无限战争》火热上映
5 3 spark发布2.4版本,性能提升巨大
3 3 HDFS
3 3 搜索引擎
2 3 《黑豹》异军突起
2 3 Radis
2 4 Tachyon日渐成熟
1 8 HBase
1 9 ES Process finished with exit code 0

Spark实现二次排序的更多相关文章

  1. 分别使用Hadoop和Spark实现二次排序

    零.序(注意本部分与标题无太大关系,可直接调至第一部分) 既然没用为啥会有序?原因不想再开一篇文章,来抒发点什么感想或者计划了,就在这里写点好了: 前些日子买了几本书,打算学习和研究大数据方面的知识, ...

  2. spark的二次排序

    通过scala实现二次排序 package _core.SortAndTopN import org.apache.spark.{SparkConf, SparkContext} /** * Auth ...

  3. Spark基础排序+二次排序(java+scala)

    1.基础排序算法 sc.textFile()).reduceByKey(_+_,).map(pair=>(pair._2,pair._1)).sortByKey(false).map(pair= ...

  4. spark函数sortByKey实现二次排序

    最近在项目中遇到二次排序的需求,和平常开发spark的application一样,开始查看API,编码,调试,验证结果.由于之前对spark的API使用过,知道API中的sortByKey()可以自定 ...

  5. 详细讲解MapReduce二次排序过程

    我在15年处理大数据的时候还都是使用MapReduce, 随着时间的推移, 计算工具的发展, 内存越来越便宜, 计算方式也有了极大的改变. 到现在再做大数据开发的好多同学都是直接使用spark, hi ...

  6. Spark(二)算子详解

    目录 Spark(二)算子讲解 一.wordcountcount 二.编程模型 三.RDD数据集和算子的使用 Spark(二)算子讲解 @ 一.wordcountcount 基于上次的wordcoun ...

  7. MapReduce二次排序

    默认情况下,Map 输出的结果会对 Key 进行默认的排序,但是有时候需要对 Key 排序的同时再对 Value 进行排序,这时候就要用到二次排序了.下面让我们来介绍一下什么是二次排序. 二次排序原理 ...

  8. Hadoop Mapreduce分区、分组、二次排序过程详解[转]

    原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动   (1)最简单的过程:  map - reduce   (2) ...

  9. Hadoop.2.x_高级应用_二次排序及MapReduce端join

    一.对于二次排序案例部分理解 1. 分析需求(首先对第一个字段排序,然后在对第二个字段排序) 杂乱的原始数据 排序完成的数据 a,1 a,1 b,1 a,2 a,2 [排序] a,100 b,6 == ...

随机推荐

  1. Linux find命令忽略目录的查找方法

    在Linux操作系统中,find命令非常强大,在文件与目录的查找方面可谓无所不至其极,如果能结合xargs命令使得,更是强大无比. 以下来看看find命令忽略目录查找的用法吧. 例1,根据文件属性查找 ...

  2. Linux下查看根目录各文件内存占用情况

    一.服务器运行一点时间后各种的项目文件,日志文件,数据库备份登,会越来越多,在linux下可以使用 du 和 df 命令查看. 1.df -h 命令查看整体磁盘使用情况 2. 使用 du -ah -- ...

  3. IDEA强制清除Maven缓存

    目录 重新导入依赖的常见方式 存在的问题 彻底清除IDEA缓存的方式 重新导入依赖的常见方式 下面图中的刷新按钮,在我的机器上,并不能每次都正确导入pom.xml中写的依赖项,而是导入之前pom.xm ...

  4. idel上传代码到github时遇到的Push rejected: Push to origin/master was rejected

    1 没有权限 2 先pull之后,再push即可

  5. EVE-NG使用手册

    转裁于https://www.cnblogs.com/51yuki/articles/eve01.html EVE-NG使用手册   一)EVE-NG的安装 1)下载EVE镜像包 https://pa ...

  6. @vue/cli 4.1.1安装

    按照安装步骤,先卸载,再安装,最终,查看vue -V 的版本都是3.8.2,也就是说并没有安装成功,于是,考虑用yarn去安装 1,首先清除缓存: yarn cache clean 2,yarn设置淘 ...

  7. 由crt和key文件生成keystore文件

    该图转自知乎 海棠依旧 1.先生成p12文件,生成的时候需要指定密码 openssl pkcs12 -export -in your_crt.crt -inkey your_key.key -out ...

  8. PHP多进程编程初步

    转自:https://www.pureweber.com/article/php-multi-process-programming-preview/ 羡慕火影忍者里鸣人的影分身么?没错,PHP程序是 ...

  9. celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)

    一.celery简介: Celery 是一个强大的 分布式任务队列 的 异步处理框架,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务(async tas ...

  10. LeetCode 1223. 掷骰子模拟 Dice Roll Simulation - Java - DP

    题目链接:1223. 掷骰子模拟 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[ ...