1.Scala实现:

/*** 二次排序:超过2列(特征)* 对比MR天气案例,自定义一个key(包含读到的一行数字),对key进行内部比较。*/
object SecondSort {def main(args: Array[String]): Unit = {val session = SparkSession.builder().appName("secondSort").master("local").getOrCreate()val sc = session.sparkContextval lines = sc.textFile("data/secondSort")//拼接成一个二元组,key:SecondSortKey(可内部比较),value:结果val transRDD: RDD[(SecondSortKey, String)] = lines.map(s=>{(SecondSortKey(s.split(" ")(0).toInt,s.split(" ")(1).toInt),s)})//排好序,把value输出transRDD.sortByKey(false).map(_._2).foreach(println)}
}
case class SecondSortKey(first:Int,second:Int)extends Ordered[SecondSortKey]{override def compare(that: SecondSortKey): Int = {//第一个相同就比第二个,否则就比第一个if (this.first-that.first==0){this.second-that.second}else{this.first-that.first}}
}

2.Java实现:

自定义key:

public class SecondSortKey implements Serializable,Comparable<SecondSortKey> {private static final long serialVersionUID=1;private int first;private int second;public int getFirst() {return first;}public void setFirst(int first) {this.first = first;}public int getSecond() {return second;}public void setSecond(int second) {this.second = second;}public SecondSortKey(int first, int second) {super();this.first = first;this.second = second;}@Overridepublic int compareTo(SecondSortKey o) {if (getFirst()-o.getFirst()==0){return getSecond()-o.getSecond();}else {return getFirst()-o.getFirst();}}
}

实现:

public class SecondSort {public static void main(String[] args) {SparkConf conf = new SparkConf();conf.setAppName("secondSort");conf.setMaster("local");JavaSparkContext sc = new JavaSparkContext(conf);JavaRDD<String> lines = sc.textFile("data/secondSort");JavaPairRDD<SecondSortKey, String> pairRDD = lines.mapToPair(new PairFunction<String, SecondSortKey, String>() {private static final long serialVersionUID = 1;@Overridepublic Tuple2<SecondSortKey, String> call(String line) throws Exception {String[] split = line.split(" ");int first = Integer.valueOf(split[0]);int second = Integer.valueOf(split[1]);SecondSortKey secondSortKey = new SecondSortKey(first, second);return new Tuple2<SecondSortKey, String>(secondSortKey, line);}});pairRDD.sortByKey(false).foreach(new VoidFunction<Tuple2<SecondSortKey, String>>() {private static final long serialVersionUID=1;@Overridepublic void call(Tuple2<SecondSortKey, String> tp) throws Exception {System.out.println(tp._2);}});}
}

数据算法——Spark二次排序相关推荐

  1. Spark学习之路(八):分别使用Java与Scala实现Spark二次排序

    内容简介 一.Spark二次排序的概念 二.实现二次排序的详细步骤(Java语言) 三.二次排序代码演示 1.Java版本 2.Scala版本 四.总结 一.Spark二次排序的概念 排序操作是数据处 ...

  2. 数据算法——Spark的TopN实现

    1.scala实现: /*** TOPN:维持一个定长数组,先塞满,然后把剩下的逐个对应数组中的元素,* 有大的就把小的弹出去,大的加进来,并移动位置来重新排序*/ object TopN {def ...

  3. 数据算法 --hadoop/spark数据处理技巧 --(二次排序问题和TopN问题)

    一.二次排序问题. MR/hadoop两种方案: 1.让reducer读取和缓存给个定键的所有值(例如,缓存到一个数组数据结构中,)然后对这些值完成一个reducer中排序.这种方法不具有可伸缩性,因 ...

  4. 【大数据分析常用算法】1.二次排序

    2019独角兽企业重金招聘Python工程师标准>>> 简介 本算法教程系列建立在您已经有了spark以及Hadoop的开发基础,如果没有的话,请观看本博客的hadoop相关教程或者 ...

  5. spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载

    相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...

  6. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  7. 数据结构与算法(十二):八大经典排序算法再回顾

    文章出自汪磊的博客,未经允许不得转载 一.排序的理解 提到排序大部分同学肯定第一时间想到int数组的排序,简单啊,所谓排序不就是将int数组按照从大到小或者从小到大排序吗,如果我有个数组存放的不是in ...

  8. datatable的数据进行组内排序_排序算法学习分享(四)希尔排序

    排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...

  9. 数据结构与算法—二叉排序(查找)树

    目录 前言 树 二叉树 二叉排序(搜索)树 概念 构造 主要方法 findmax(),findmin() isContains(int x) insert(int x) delete(int x) 完 ...

最新文章

  1. python中selenium中使用ajax_selenium 智能等待ajax完成调用
  2. 学习响应式BootStrap来写融职教育网站,Bootsrtap第七天PC端轮播图
  3. mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据
  4. Oracle做ip连接限制
  5. oracle设置打印机,使用 Oracle Solaris 打印管理器设置网络连接的打印机
  6. html ajax输出表格中,使用Ajax来渲染HTML表格
  7. 【转】win7与ubuntu双系统,删除ubuntu后,启动错误error:no such partition grub rescue的修复--不错...
  8. 【机器学习】Pandas读取存在Github上的数据集
  9. python 根据对应关系批量修改文件名
  10. 181022词霸有道扇贝每日一句
  11. 1193, Unknown system variable 'tx_isolation'
  12. 人人开源代码生成器启报错
  13. arduino烧录_arduino 烧录 attiny85
  14. 如何在YouTube上制作播放列表
  15. Win10版本那么多怎么区别(2)
  16. 东方幻想乡/BadApple!!
  17. 大学计算机学cad的,征文通知:第二十二届中国计算机辅助设计与图形学(CADCG 2019)学术会议...
  18. 如何实现百度mapv开源库与ol3的结合
  19. Win10电脑没有打开蓝牙的按钮怎么办?
  20. 关于迅盘Turbo Memory的ReadyDrive功能被禁用的思考

热门文章

  1. 监督分类空白处也被分类了_用于半监督短文本分类的异构图注意网络
  2. 宁夏启动人工智能助推教师队伍建设行动
  3. 深浅拷贝、函数、内置函数、文件处理、三元运算、递归
  4. Python(四)字符串
  5. 虚拟化,可实现国产化替代
  6. Android---Android 屏幕尺寸与密度
  7. CBM——IT与业务融合的重要途径
  8. 田志刚:智慧的员工,个人知识管理
  9. Keras下载的数据集以及预训练模型保存在哪里
  10. 【R语言学习】时间序列