Spark排序方式集锦

 一.简介

  spark中的排序一般可以使用orderBy或sort算子,可以结合负号、ASC/DESC和col进行简单排序、二次排序等情况

二.代码实现

 1 package big.data.analyse.sparksql
 2 
 3 import org.apache.log4j.{Level, Logger}
 4 import org.apache.spark.sql.SparkSession
 5 
 6 /**
 7   * 排序
 8   * Created by zhen on 2019/8/14.
 9   */
10 object DateFrameSort {
11   Logger.getLogger("org").setLevel(Level.WARN)
12   def main(args: Array[String]): Unit = {
13     val spark = SparkSession.builder().appName("DateFrameSort").master("local[2]").getOrCreate()
14 
15     val data = Array((7, 2, 3), (1, 8, 6), (1, 8, 3), (4, 5, 9))
16     val df = spark.createDataFrame(data).toDF("col1", "col2", "col3")
17     println("===原始数据===")
18     df.show()
19     println("===按照col1,col2进行默认排序===")
20     // 默认的升序,会按照列的先后顺序进行升序排序
21     df.orderBy("col2", "col3").show()
22     println("===按照-df(col1)进行升序排序===")
23     /**
24       * 此排序方式需要提前创建好df,不能在创建df时使用
25       */
26     df.orderBy(-df("col2")).show
27     println("===按照df(col1).asc,df(col2).desc进行二次排序===")
28     /**
29       * 二次排序
30       * -号和desc/asc不能在一块使用
31       */
32     df.orderBy(df("col1").asc,df("col2").desc).show
33     println("===asc/desc排序方法===")
34 
35     /**
36       * 使用desc等算子需要预先导入
37       */
38     import org.apache.spark.sql.functions._
39 
40     df.orderBy(asc("col2")).show
41     spark.createDataFrame(data).toDF("col1", "col2", "col3").orderBy(desc("col2")).show
42     df.orderBy(asc("col2"), desc("col3")).show
43     /**
44       * sort函数和orderBy用法类似
45       */
46     df.sort(desc("col2")).show
47     println("===col组合asc/desc排序方法===")
48     df.orderBy(-col("col2")).show
49     df.orderBy(col("col2").desc).show
50     /**
51       * 第二列无效
52       * -号和desc/asc不能在一个orderBy使用
53       */
54     df.orderBy(col("col2").desc, -col("col3")).show
55     spark.stop()
56   }
57 }

三.结果

  

  

  

  

  

  

 

转载于:https://www.cnblogs.com/yszd/p/11354227.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值