Spark DataFrame按某列降序排序
阿新 • • 發佈:2019-01-25
前言
本文總結如何將DataFrame按某列降序排序,因為Spark預設的排序方式為升序,而降序的用法和java語言等又不一樣,所以需要特地總結記錄一下其用法。
1、建立測試用DataFrame
val data = Array((7, 2, 3), (1, 8, 6), (4, 5, 9))
val df = spark.createDataFrame(data).toDF("col1", "col2", "col3")
df.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 7| 2| 3|
| 1| 8| 6|
| 4| 5| 9|
+----+----+----+
2、預設的升序排序效果(按col2排序,以下都是)
df.orderBy("col2").show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 7| 2| 3|
| 4| 5| 9|
| 1| 8| 6|
+----+----+----+
3、降序方法一
df.orderBy(-df("col2")).show
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| 8| 6|
| 4| 5| 9|
| 7| 2| 3|
+----+----+----+
這個方法在前面加上負號-即可,看起來挺簡單的,但是其實這種方法不能在第一次構建df的時候進行排序,必須先建立好一個df,再用建立好的df生成新的df。
4、降序方法二
下面的方法和方法一是一樣的
df.orderBy(df("col2").desc).show
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| 8| 6|
| 4| 5| 9|
| 7| 2| 3|
+----+----+----+
5、降序方法三
import org.apache.spark.sql.functions._
df.orderBy(desc("col2" )).show
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| 8| 6|
| 4| 5| 9|
| 7| 2| 3|
+----+----+----+
這種方法是我比較喜歡的,因為在第一次建立的時候就可以排序了,且使用起來也很簡潔。
可以使用下面的程式碼測試一下
spark.createDataFrame(data).toDF("col1", "col2", "col3").orderBy(desc("col2")).show
- 注:上面匯入的包,在spark-shell裡執行的時候是不需要的
6、降序方法四
下面的方法和方法三是一樣的,由於結果一樣,就不貼上了
df.orderBy(-col("col2")).show
7、降序方法五
下面的方法和方法四是一樣的,由於結果一樣,就不貼上了
df.orderBy(col("col2").desc).show
8、sort函式
sort函式和orderBy用法和結果是一樣的,因為orderBy和sql語法裡的order by名字一樣,所以我首先想到這個方法,就把orderBy放在前面介紹了(sort比orderBy短一點哈~)
df.sort(desc("col2")).show
附錄
package com.dkl.leanring.spark.df
import org.apache.spark.sql.SparkSession
object DfSortDesc {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder().appName("DfSortDesc").master("local").getOrCreate()
val data = Array((7, 2, 3), (1, 8, 6), (4, 5, 9))
val df = spark.createDataFrame(data).toDF("col1", "col2", "col3")
//列印 df
df.show()
// 預設的升序
df.orderBy("col2").show()
//降序方法一
df.orderBy(-df("col2")).show
//降序方法二同上
df.orderBy(df("col2").desc).show
import org.apache.spark.sql.functions._
//降序方法三
df.orderBy(desc("col2")).show
//測試方法三
spark.createDataFrame(data).toDF("col1", "col2", "col3").orderBy(desc("col2")).show
//降序方法四
df.orderBy(-col("col2")).show
//降序方法五
df.orderBy(col("col2").desc).show
//sort函式和orderBy用法和結果是一樣的
df.sort(desc("col2")).show
spark.stop()
}
}