Spark二次排序(java)

原创 2018年04月17日 11:43:34
package com.sparktest;

import java.io.Serializable;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;

import scala.Tuple2;
import scala.math.Ordered;
/**
 * 二次排序(按第一个值升序,按第二个值降序)
 * 部分原始数据:
 *       5 6
         4 1
         6 7
         6 4
         7 2
         4 1
 */
public class SecondSort
{
    public static void main(String[] args)
    {
        SparkConf conf = new SparkConf()
                .setAppName("SecondSort")
                .setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> linesRDD = sc.textFile("d://spark_data//secondSort.txt");
        /**
         * 把每一行转为tuple: (num1,num2)
         */
        JavaPairRDD<MySortKey, String> tupleRDD = linesRDD.mapToPair(new PairFunction<String, MySortKey, String>()
        {

            @Override
            public Tuple2<MySortKey, String> call(String line) throws Exception
            {
                String data[] = line.split(" ");
                int num1 = Integer.parseInt(data[0]);
                int num2 = Integer.parseInt(data[1]);
                return new Tuple2<MySortKey, String>(new MySortKey(num1,num2),line);
            }
        });
        
        JavaPairRDD<MySortKey, String> sortByKeyRDD = tupleRDD.sortByKey();
        JavaRDD<String> sortedRDD = sortByKeyRDD.map(new Function<Tuple2<MySortKey,String>, String>()
        {

            @Override
            public String call(Tuple2<MySortKey, String> tuple) throws Exception
            {
                
                return tuple._2;
            }
        });
        
        sortedRDD.foreach(new VoidFunction<String>()
        {
            
            @Override
            public void call(String line) throws Exception
            {
                System.out.println(line);
                
            }
        });
        sc.close();
    }
}
/**
 * 自定义排序key,按第一个值升序,按第二个值降序
 */
class MySortKey implements Ordered<MySortKey>,Serializable{
    /**
     * (域的意义、目的、功能)
     */
    private static final long serialVersionUID = -8363444941537305530L;
    private int first;
    private int second;
    public MySortKey(int first,int second)
    {
        this.first = first;
        this.second = 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;
    }

    @Override
    public boolean $greater(MySortKey other)
    {
        if(this.first > other.getFirst()){
            return true;
        }else if(this.first == other.getFirst() && this.second < other.getSecond()){
            return true;
        }
        return false;
    }

    @Override
    public boolean $greater$eq(MySortKey other)
    {
        if(this.$greater(other)){
            return true;
        }else if(this.first == other.getFirst() && this.second == other.getSecond()){
            return true;
        }
        return false;
    }

    @Override
    public boolean $less(MySortKey other)
    {
        
        return !this.$greater$eq(other);
    }

    @Override
    public boolean $less$eq(MySortKey other)
    {
        return !this.$greater(other);
    }

    @Override
    public int compare(MySortKey other)
    {
        if(this.first - other.first != 0){
            return this.first - other.getFirst();
        }else{
            return -(this.second - other.getSecond());
        }
    }

    @Override
    public int compareTo(MySortKey other)
    {
        if(this.first - other.first != 0){
            return this.first - other.getFirst();
        }else{
            return -(this.second - other.getSecond());
        }
    }
    
}

Spark基础排序+二次排序(java+scala)

1.基础排序算法 2.二次排序算法 3.更高级别排序 4.排序算法内幕 1.基础排序算法sc.textFile("/data/putfile.txt").flatMap(_.split(" "...
  • sundujing
  • sundujing
  • 2016-05-13 23:28:10
  • 5941

Spark的高级排序(二次排序)

spark 二次排序
  • wuxintdrh
  • wuxintdrh
  • 2017-05-30 11:20:56
  • 1850

Spark 使用sortByKey进行二次排序

Spark的sortByKey API允许自定义排序规则,这样就可以进行自定义的二次排序、三次排序等等。 先来看一下sortByKey的源码实现:def sortByKey(): JavaPairR...
  • u010110208
  • u010110208
  • 2016-08-15 07:33:48
  • 2564

Spark二次排序

Spark当中做二次排序非常简单,因为有大量的现成函数已经实现了,只需要进行组合运用就好 在这里进行一下二次排序的总结 如果对两列或多列同时进行升序或降序排序的话比较容易实现 初始数据 ...
  • u012102306
  • u012102306
  • 2016-11-10 15:04:22
  • 1250

Spark分组二次排序

在运用Spark数据处理中,有时要对数据进行分组(二次)排序。数据存储在HDFS中。实现代码如下: package com.ibeifeng.spark.core import org.apa...
  • Spark2creat_palains
  • Spark2creat_palains
  • 2017-06-14 21:42:25
  • 482

Spark二次排序(Java+Scala)

1.基础排序算法sc.textFile("/data/putfile.txt").flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_,1...
  • Full_Stack_delp
  • Full_Stack_delp
  • 2017-06-01 14:07:26
  • 337

【spark】sortByKey实现二次排序

spark 二次排序
  • a6210575
  • a6210575
  • 2016-08-21 20:38:48
  • 2366

Spark排序算法!! 使用java开发 自定义key值 进行二次排序 深入解析!

Spark使用JAVA开发的二次排序 【数据文件Input】 2 3  4 1  3 2  4 3  8 7  2 1 【运行结果Output】 2 1  2 3  3 2  ...
  • duan_zhihua
  • duan_zhihua
  • 2016-02-28 20:36:55
  • 2505

数据处理中Java与scala实现二次排序

spark编程之java版二次排序与Scala版二次排序,我们很明显的会发现Scala比Java简单的多,,,...
  • LongHai_Zheng
  • LongHai_Zheng
  • 2016-08-17 18:01:53
  • 734

spark 二次排序实现

spark 二次排序实现
  • high2011
  • high2011
  • 2016-06-04 15:27:38
  • 914
收藏助手
不良信息举报
您举报文章:Spark二次排序(java)
举报原因:
原因补充:

(最多只允许输入30个字)