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 实现二次排序的更多相关文章

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

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

  2. Spark Java API 计算 Levenshtein 距离

    Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...

  3. Spark Java API 之 CountVectorizer

    Spark Java API 之 CountVectorizer 由于在Spark中文本处理与分析的一些机器学习算法的输入并不是文本数据,而是数值型向量.因此,需要进行转换.而将文本数据转换成数值型的 ...

  4. 在 IntelliJ IDEA 中配置 Spark(Java API) 运行环境

    1. 新建Maven项目 初始Maven项目完成后,初始的配置(pom.xml)如下: 2. 配置Maven 向项目里新建Spark Core库 <?xml version="1.0& ...

  5. spark (java API) 在Intellij IDEA中开发并运行

    概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序. 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中 ...

  6. 【spark】示例:二次排序

    我们有这样一个文件          首先我们的思路是把输入文件数据转化成键值对的形式进行比较不就好了嘛! 但是你要明白这一点,我们平时所使用的键值对是不具有比较意义的,也就说他们没法拿来直接比较. ...

  7. spark java api数据分析实战

    1 spark关键包 <!--spark--> <dependency> <groupId>fakepath</groupId> <artifac ...

  8. 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值进行分组 ...

  9. 【Spark Java API】broadcast、accumulator

    转载自:http://www.jianshu.com/p/082ef79c63c1 broadcast 官方文档描述: Broadcast a read-only variable to the cl ...

随机推荐

  1. JS--条件语句

    一.If条件判断 1.1 if条件 if(条件){ //js代码 } 1.2 if...else if(条件){ //js代码 }else { //js代码 } 1.3 if..else if..el ...

  2. K8S发布解释型语言应用的最佳实践

    说明 我们知道,k8s在发布编译型语言的应用时,几乎不用多考虑,就会选择将编译好jar/war包(java语言)或者二进制文件(golang/c++)直接打到镜像当中,生成新的应用镜像,然后将镜像推到 ...

  3. [Java] 理解JVM之二:类加载步骤及内存分配

    一.类加载器 ClassLoader 能根据需要将 class 文件加载到 JVM 中,它使用双亲委托模型,在加载类的时候会判断如果类未被自己加载过,就优先让父加载器加载.另外在使用 instance ...

  4. python使用数组作为索引遍历数组

    python使用数组作为索引遍历数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me python使用数组作为索引遍历数组 import numpy as np a=np.arange(0,5 ...

  5. JavaScript中replace()方法的第二个参数解析

    语法 string.replace(searchvalue,newvalue) 参数值 searchvalue 必须.规定子字符串或要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则 ...

  6. What is an intuitive explanation of the relation between PCA and SVD?

    What is an intuitive explanation of the relation between PCA and SVD? 36 FOLLOWERS Last asked: 30 Se ...

  7. 转 -- OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结

    转载地址:http://emouse.cnblogs.com/ 飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其 ...

  8. Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据

    路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...

  9. Python练习-装饰器版-为什么我的用户总被锁定

    参考代码如下: 1.用户登录程序流程控制代码: # 编辑者:闫龙 if __name__ == '__main__': import UserLoginFuncation LoclCount=[]; ...

  10. Ubuntu 设置 sudo 开机自启动项 无需输入密码

    如果你想设置一个需要sudo权限执行的开机自启动项,而不需要输入密码,那么你需要把该程序加入  /etc/sudoers 中.要直线这个, 首先执行 sudo visudo ,在文件最后加入下面一行 ...