zoukankan      html  css  js  c++  java
  • Spark实现二次排序

    一.代码实现

     1 package big.data.analyse.scala.secondsort
     2 
     3 import org.apache.log4j.{Level, Logger}
     4 import org.apache.spark.sql.SparkSession
     5 
     6 /** 二次排序
     7   * Created by zhen on 2019/5/29.
     8   */
     9 class SecondSortByKey(val first:Int,val second:Int) extends Ordered[SecondSortByKey] with Serializable{
    10   def compare(other : SecondSortByKey): Int ={
    11     if(this.first - other.first != 0){//正序
    12       this.first - other.first
    13     }else{//倒序
    14       other.second - this.second
    15     }
    16   }
    17 }
    18 object SecondSortByKey{
    19   /**
    20     * 设置日志级别
    21     */
    22   Logger.getLogger("org").setLevel(Level.WARN)
    23   def main(args: Array[String]) {
    24     val spark = SparkSession
    25       .builder()
    26       .appName("SecondSortByKey")
    27       .master("local[2]")
    28       .getOrCreate()
    29     val sc = spark.sparkContext
    30     val rows = sc.textFile("src/big/data/analyse/scala/secondsort/sort.txt")
    31 
    32     val pairWithSortByKey = rows
    33       .filter(row=>row.split(" ").length==3)//过滤错误的数据
    34       .map(row=>{
    35         val array = row.split(" ")
    36         (new SecondSortByKey(array(0).toInt,array(1).toInt),row)
    37     })
    38     println("先正序后倒序")
    39     pairWithSortByKey
    40       .sortByKey(true) // 排序,true:先正序后倒序,false:先倒序后正序
    41       .map(map => map._2)
    42       .collect()
    43       .foreach(println)
    44     println("先倒序后正序")
    45     pairWithSortByKey
    46       .sortByKey(false) // 排序,true:先正序后倒序,false:先倒序后正序
    47       .map(map => map._2)
    48       .collect()
    49       .foreach(println)
    50 
    51     sc.stop()
    52   }
    53 }

    二.结果

    先正序后倒序
    1 9 ES
    1 8 HBase
    2 4 Tachyon日渐成熟
    2 3 《黑豹》异军突起
    2 3 Radis
    3 3 HDFS
    3 3 搜索引擎
    5 3 spark发布2.4版本,性能提升巨大
    5 2 《复仇者联盟3:无限战争》火热上映
    6 3 Maven
    7 2 Solr
    先倒序后正序
    7 2 Solr
    6 3 Maven
    5 2 《复仇者联盟3:无限战争》火热上映
    5 3 spark发布2.4版本,性能提升巨大
    3 3 HDFS
    3 3 搜索引擎
    2 3 《黑豹》异军突起
    2 3 Radis
    2 4 Tachyon日渐成熟
    1 8 HBase
    1 9 ES
    
    Process finished with exit code 0
  • 相关阅读:
    单向链表
    字符串的碎片整理。。。
    刷夜有感
    C中的枚举类型及一些用法
    hdu 1001(无赖的一种方法)
    加法器和布尔运算符
    《C和指针》学习笔记(4)
    Java中创建对象的5种方式 -[转] http://www.codeceo.com/article/5-ways-java-create-object.html
    程序员转行为什么这么难--[转]
    Tomcat 性能优化之APR插件安装 -- [转]
  • 原文地址:https://www.cnblogs.com/yszd/p/10947523.html
Copyright © 2011-2022 走看看