数据算法——Spark二次排序
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二次排序相关推荐
- Spark学习之路(八):分别使用Java与Scala实现Spark二次排序
内容简介 一.Spark二次排序的概念 二.实现二次排序的详细步骤(Java语言) 三.二次排序代码演示 1.Java版本 2.Scala版本 四.总结 一.Spark二次排序的概念 排序操作是数据处 ...
- 数据算法——Spark的TopN实现
1.scala实现: /*** TOPN:维持一个定长数组,先塞满,然后把剩下的逐个对应数组中的元素,* 有大的就把小的弹出去,大的加进来,并移动位置来重新排序*/ object TopN {def ...
- 数据算法 --hadoop/spark数据处理技巧 --(二次排序问题和TopN问题)
一.二次排序问题. MR/hadoop两种方案: 1.让reducer读取和缓存给个定键的所有值(例如,缓存到一个数组数据结构中,)然后对这些值完成一个reducer中排序.这种方法不具有可伸缩性,因 ...
- 【大数据分析常用算法】1.二次排序
2019独角兽企业重金招聘Python工程师标准>>> 简介 本算法教程系列建立在您已经有了spark以及Hadoop的开发基础,如果没有的话,请观看本博客的hadoop相关教程或者 ...
- spark的数三角形算法_数据算法 Hadoop Spark大数据处理技巧 PDF 下载
相关截图: 资料简介: 本书介绍了很多基本设计模式.优化技术和数据挖掘及机器学习解决方案,以解决生物信息学.基因组学.统计和社交网络分析等领域的很多问题.这本书还概要介绍了MapReduce.Hado ...
- 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...
- 数据结构与算法(十二):八大经典排序算法再回顾
文章出自汪磊的博客,未经允许不得转载 一.排序的理解 提到排序大部分同学肯定第一时间想到int数组的排序,简单啊,所谓排序不就是将int数组按照从大到小或者从小到大排序吗,如果我有个数组存放的不是in ...
- datatable的数据进行组内排序_排序算法学习分享(四)希尔排序
排序,也称为排序算法,可以说是我们学习算法的过程中遇到的第一个门槛,也是实际应用中使用得较为频繁的算法,我将自己对所学的排序算法进行一个归纳总结与分享,如有错误,欢迎指正! 排序算法学习分享(一)选择 ...
- 数据结构与算法—二叉排序(查找)树
目录 前言 树 二叉树 二叉排序(搜索)树 概念 构造 主要方法 findmax(),findmin() isContains(int x) insert(int x) delete(int x) 完 ...
最新文章
- python中selenium中使用ajax_selenium 智能等待ajax完成调用
- 学习响应式BootStrap来写融职教育网站,Bootsrtap第七天PC端轮播图
- mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据
- Oracle做ip连接限制
- oracle设置打印机,使用 Oracle Solaris 打印管理器设置网络连接的打印机
- html ajax输出表格中,使用Ajax来渲染HTML表格
- 【转】win7与ubuntu双系统,删除ubuntu后,启动错误error:no such partition grub rescue的修复--不错...
- 【机器学习】Pandas读取存在Github上的数据集
- python 根据对应关系批量修改文件名
- 181022词霸有道扇贝每日一句
- 1193, Unknown system variable 'tx_isolation'
- 人人开源代码生成器启报错
- arduino烧录_arduino 烧录 attiny85
- 如何在YouTube上制作播放列表
- Win10版本那么多怎么区别(2)
- 东方幻想乡/BadApple!!
- 大学计算机学cad的,征文通知:第二十二届中国计算机辅助设计与图形学(CADCG 2019)学术会议...
- 如何实现百度mapv开源库与ol3的结合
- Win10电脑没有打开蓝牙的按钮怎么办?
- 关于迅盘Turbo Memory的ReadyDrive功能被禁用的思考