一.代码实现
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