spark java API 实现二次排序
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;
private String first;
private long second;
public SecondSortKey(String first, long second) {
super();
this.first = first;
this.second = second;
}
public String getFirst() {
return first;
}
public void setFirst(String first) {
this.first = first;
}
public long getSecond() {
return second;
}
public void setSecond(long second) {
this.second = second;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((first == null) ? 0 : first.hashCode());
result = prime * result + (int) (second ^ (second >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SecondSortKey other = (SecondSortKey) obj;
if (first == null) {
if (other.first != null)
return false;
} else if (!first.equals(other.first))
return false;
if (second != other.second)
return false;
return true;
}
@Override
public boolean $greater(SecondSortKey that) {
if (this.first.compareTo(that.getFirst()) > 0) {
return true;
} else if (this.first.equals(that.getFirst()) && this.second > that.getSecond()) {
return true;
}
return false;
}
@Override
public boolean $greater$eq(SecondSortKey that) {
if (this.$greater(that)) {
return true;
}else if(this.first.equals(that.getFirst()) && this.second == that.getSecond()){
return true;
}
return false;
}
@Override
public boolean $less(SecondSortKey that) {
if (this.first.compareTo(that.getFirst()) < 0) {
return true;
} else if (this.first.equals(that.getFirst()) && this.second < that.getSecond()) {
return true;
}
return false;
}
@Override
public boolean $less$eq(SecondSortKey that) {
if (this.$less(that)) {
return true;
}else if(this.first.equals(that.getFirst()) && this.second == that.getSecond()){
return true;
}
return false;
}
@Override
public int compare(SecondSortKey that) {
if (this.first.compareTo(that.getFirst()) != 0) {
return this.first.compareTo(that.getFirst());
} else {
return (int) (this.second - that.getSecond());
}
}
@Override
public int compareTo(SecondSortKey that) {
if (this.first.compareTo(that.getFirst()) != 0) {
return this.first.compareTo(that.getFirst());
} else {
return (int) (this.second - that.getSecond());
}
}
}
package com.spark.sort;
2
3 import org.apache.spark.SparkConf;
4 import org.apache.spark.api.java.JavaPairRDD;
5 import org.apache.spark.api.java.JavaRDD;
6 import org.apache.spark.api.java.JavaSparkContext;
7 import org.apache.spark.api.java.function.Function;
8 import org.apache.spark.api.java.function.PairFunction;
9
10 import scala.Tuple2;
11
12 public class SecondSort {
13
14 public static void main(String[] args) {
15 SparkConf sparkConf = new SparkConf().setAppName("secondsort").setMaster("local");
16 JavaSparkContext jsc = new JavaSparkContext(sparkConf);
17 JavaRDD<String> textFileRDD = jsc.textFile("D:\\test\\input\\sort");
18 JavaPairRDD<SecondSortKey,String> pairRDD = textFileRDD.mapToPair(new PairFunction<String, SecondSortKey, String>() {
19 @Override
20 public Tuple2<SecondSortKey, String> call(String t) throws Exception {
21 String[] split = t.split("\t");
22 String first = split[0];
23 Long second = Long.valueOf(split[1]);
24 SecondSortKey ssk = new SecondSortKey(first, second);
25 return new Tuple2<SecondSortKey, String>(ssk, t);
26 }
27 });
28
29 //排序
30 JavaPairRDD<SecondSortKey, String> sortByKeyRDD =pairRDD.sortByKey();
31
32 //过滤自定义的key
33 JavaRDD<String> mapRDD = sortByKeyRDD.map(new Function<Tuple2<SecondSortKey,String>, String>() {
34
35 @Override
36 public String call(Tuple2<SecondSortKey, String> v1) throws Exception {
37
38 return v1._2;
39 }
40 });
41
42 mapRDD.saveAsTextFile("D:\\test\\output\\sort");
43
44 jsc.close();
45 }
46
47
48 }
源数据:
a 12
a 2
b 26
c 85
ab 32
ab 23
ac 12
b 85
a 36
b 69
c 25
排序之后:
a 2
a 12
a 36
ab 23
ab 32
ac 12
b 26
b 69
b 85
c 25
c 85
spark java API 实现二次排序的更多相关文章
- spark函数sortByKey实现二次排序
最近在项目中遇到二次排序的需求,和平常开发spark的application一样,开始查看API,编码,调试,验证结果.由于之前对spark的API使用过,知道API中的sortByKey()可以自定 ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- Spark Java API 之 CountVectorizer
Spark Java API 之 CountVectorizer 由于在Spark中文本处理与分析的一些机器学习算法的输入并不是文本数据,而是数值型向量.因此,需要进行转换.而将文本数据转换成数值型的 ...
- 在 IntelliJ IDEA 中配置 Spark(Java API) 运行环境
1. 新建Maven项目 初始Maven项目完成后,初始的配置(pom.xml)如下: 2. 配置Maven 向项目里新建Spark Core库 <?xml version="1.0& ...
- spark (java API) 在Intellij IDEA中开发并运行
概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序. 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中 ...
- 【spark】示例:二次排序
我们有这样一个文件 首先我们的思路是把输入文件数据转化成键值对的形式进行比较不就好了嘛! 但是你要明白这一点,我们平时所使用的键值对是不具有比较意义的,也就说他们没法拿来直接比较. ...
- spark java api数据分析实战
1 spark关键包 <!--spark--> <dependency> <groupId>fakepath</groupId> <artifac ...
- spark分组统计及二次排序案例一枚
组织数据形式: 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值进行分组 ...
- 【Spark Java API】broadcast、accumulator
转载自:http://www.jianshu.com/p/082ef79c63c1 broadcast 官方文档描述: Broadcast a read-only variable to the cl ...
随机推荐
- 【Asp.net入门3-01】使用jQuery-创建示例项目
过去,浏览器除了显示HTML外,很少具有其他功能.因此,早期的Web应用程序需要依赖服务 器端代码来响应用户交互并执行数据操作.Web应用程序的交互依赖HTML表单元素和浏览器向服务 器发送数据的功能 ...
- python 字符串切片知识巩固
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分).我们使用一对方括号.起始偏移量start.终止偏移量end 以及可选的步长step 来定义一个分片. 格式: [start:en ...
- html概括
--引入 什么是html? HTML(Hyper Text Markup Language)超文本标记语言. -->那么第一个问题----什么是标记语言呢? 标记语言就是让文本展示更丰富,更美观 ...
- 面试心得与总结---BAT、网易、蘑菇街
作者:Xoper.ducky链接:https://www.nowcoder.com/discuss/3043来源:牛客网 之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总 ...
- Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions)
Hadoop生态圈-Hive的自定义函数之UDTF(User-Defined Table-Generating Functions) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- react-music React全家桶项目,精品之作!
React-Music 全家桶项目,精品之作! 一.简介 该项目是基于React全家桶开发的一个音乐播放器,技术栈采用:Webpack + React + React-redux + React-ro ...
- 介绍一个强大的画图类 CImage(转)
我们知道,Visual C++的CBitmap类和静态图片控件的功能是比较弱的,它只能显示出在资源中的图标.位图.光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件( ...
- 【leetcode 简单】 第八十四题 两个数组的交集
给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5], ...
- Chip Factory(HDU5536 + 暴力 || 01字典树)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5536 题目: 题意: 对于给定的n个数,求出三个下标不同的数使得(si+sj)^sk最大. 思路: ...
- 对某道ctf的一点点记录
题目:http://ctf5.shiyanbar.com/web/pcat/index.php 是一道注入的题,主要利用了offset 和 group by with rollup的知识 1.offs ...