spark函数sortByKey实现二次排序】的更多相关文章

最近在项目中遇到二次排序的需求,和平常开发spark的application一样,开始查看API,编码,调试,验证结果.由于之前对spark的API使用过,知道API中的sortByKey()可以自定义排序规则,通过实现自定义的排序规则来实现二次排序. 这里为了说明问题,举了一个简单的例子,key是由两部分组成的,我们这里按key的第一部分的降序排,key的第二部分升序排,具体如下: JavaSparkContext javaSparkContext = new JavaSparkContext…
我们有这样一个文件          首先我们的思路是把输入文件数据转化成键值对的形式进行比较不就好了嘛! 但是你要明白这一点,我们平时所使用的键值对是不具有比较意义的,也就说他们没法拿来直接比较. 我们可以通过sortByKey,sortBy(pair._2)来进行单列的排序,但是没法进行两列的同时排序. 那么我们该如何做呢? 我们可以自定义一个键值对的比较类来实现比较, 类似于JAVA中自定义类实现可比较性实现comparable接口. 我们需要继承Ordered和Serializable特…
package com.spark.sort; import java.io.Serializable; import scala.math.Ordered; public class SecondSortKey implements Serializable, Ordered<SecondSortKey> { /** * serialVersionUID */ private static final long serialVersionUID = -2749925310062789494L…
组织数据形式: aa 11 bb 11 cc 34 aa 22 bb 67 cc 29 aa 36 bb 33 cc 30 aa 42 bb 44 cc 49 需求: 1.对上述数据按key值进行分组 2.对分组后的值进行排序 3.截取分组后值得top 3位以key-value形式返回结果 答案如下: val groupTopNRdd = sc.textFile("hdfs://db02:8020/user/hadoop/groupsorttop/groupsorttop.data")…
1.基础排序算法 sc.textFile()).reduceByKey(_+_,).map(pair=>(pair._2,pair._1)).sortByKey(false).map(pair=>(pair._2,pair._1)).collect //key value交换 sc.setLogLevel("WARN") 2.二次排序算法 所谓二次排序就是指排序的时候考虑两个维度(有可能10次排序) Java版本 package com.dt.java.spark; imp…
零.序(注意本部分与标题无太大关系,可直接调至第一部分) 既然没用为啥会有序?原因不想再开一篇文章,来抒发点什么感想或者计划了,就在这里写点好了: 前些日子买了几本书,打算学习和研究大数据方面的知识,一直因为实习.考试.毕业设计等问题搞得没有时间,现在进入了寒假,可以安心的学点有用的知识了. 这篇博客里的算法部分的内容来自<数据算法:Hadoop/Spark大数据处理技巧>一书,不过书中的代码虽然思路正确,但是代码不完整,并且只有java部分的编程,我在它的基础上又加入scala部分,当然是在…
通过scala实现二次排序 package _core.SortAndTopN import org.apache.spark.{SparkConf, SparkContext} /** * Author Mr. Guo * Create 2018/9/29 - 22:00 */ class SecondarySort(val first: Int, val second: Int) extends Ordered[SecondarySort] with Serializable { overr…
一.代码实现 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[SecondSo…
package com.profile.mainimport org.apache.spark.sql.expressions.Windowimport org.apache.spark.sql.functions._ import org.apache.log4j.{Level, Logger} import com.profile.tools.{DateTools, JdbcTools, LogTools, SparkTools}import com.dhd.comment.Constant…
默认情况下,Map 输出的结果会对 Key 进行默认的排序,但是有时候需要对 Key 排序的同时再对 Value 进行排序,这时候就要用到二次排序了.下面让我们来介绍一下什么是二次排序. 二次排序原理         我们把二次排序主要分为以下几个阶段. Map 起始阶段         在Map阶段,使用 job.setInputFormatClass() 定义的 InputFormat ,将输入的数据集分割成小数据块 split,同时 InputFormat 提供一个 RecordReade…