SparkSQL介紹並實現開窗函式
1.開窗函式
- 聚合函式和開窗函式
聚合函式是將多行變成一行
開窗函式是將一行變成多行
- 開窗函式分類
聚合開窗函式 : 聚合函式over 這裡的選擇可以是partition by 子句,但不可以是order by子句
排序開窗函式 : 排序函式over 這裡的選項可以是order by 子句,可以是 over(partition by 子句 order by 子句), 但不可以是 partition by 子句。
2.準備工作
//導包
import org.apache.spark.sql.SparkSession
//建立class 樣例類
case class Score(name: String, clazz: Int, score: Int)
//編寫程式碼
// 1.例項SparkSession
val spark = SparkSession.builder().master("local[*]").appName("sql").getOrCreate()
//2.根據SparkSession獲取sparkContext 上下文物件
val sc = spark.sparkContext
//3.匯入隱式類
import spark.implicits._
//4.新增建立RDD並新增資料
val scoreDF = sc.makeRDD(Array(
Score("a1", 1, 80),
Score("a2", 1, 78),
Score("a3", 1, 95),
Score("a4", 2, 74),
Score("a5", 2, 92),
Score("a6", 3, 99),
Score("a7", 3, 99),
Score("a8", 3, 45),
Score("a9", 3, 55),
Score("a10", 3, 78),
Score("a11", 3, 100))).toDF("name", "clazz", "score")
//5.登錄檔
scoreDF.createOrReplaceTempView("scores")
//6.資料展示
scoreDF.show()
3.聚合開窗函式
spark.sql("select * , count(name) over() name_count from scores").show()
// 按照班級進行分組
spark.sql("select * , count(name) over(partition by clazz) name_count from scores").show()
4.排序開窗函式
spark.sql("select * , row_number() over(order by score) rank from scores").show()
//先分割槽然後在排序
spark.sql("select * , row_number() over(partition by clazz order by score) rank from scores").show()
// 跳躍排序
spark.sql("select * , rank() over(order by score) rank from scores").show()
//先分割槽在跳躍排序
spark.sql("select * , rank() over(partition by clazz order by score) rank from scores").show()
// 連續排序
spark.sql("select * , dense_rank() over( order by score) rank from scores").show()
//先分割槽在連續排序
spark.sql("select * , dense_rank() over(partition by clazz order by score) rank from scores").show()
// 分組將資料分為N個組
spark.sql("select * ,ntile(6) over( order by score) rank from scores").show()
相關文章
- SparkSQL 開窗函式SparkSQL函式
- SparkSQL開窗函式SparkSQL函式
- SparkSql 06 開窗函式SparkSQL函式
- 微軟外服工作札記③——視窗函式的介紹微軟函式
- stoi函式介紹函式
- Spark 開窗函式Spark函式
- cuda函式庫介紹函式
- oracle常用函式介紹Oracle函式
- funclib函式庫介紹函式
- 【Spark篇】---SparkSql之UDF函式和UDAF函式SparkSQL函式
- 開窗函式彙總函式
- Spark SQL 開窗函式SparkSQL函式
- Spark操作開窗函式Spark函式
- PostgreSQL之SQL函式介紹及實踐(一)SQL函式
- Dart建構函式介紹Dart函式
- javascript函式中with的介紹JavaScript函式
- SAP UI5和Angular的函式防抖(Debounce)和函式節流(Throttle)實現原理介紹UIAngular函式
- javascript中generator函式的介紹JavaScript函式
- javascript高階函式的介紹JavaScript函式
- ES6 Generator 函式介紹函式
- 原創:oracle聚合函式介紹Oracle函式
- 快速介紹幾個JS函式JS函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- SparkSQL -- 02 【SparkSQL檔案的讀取與落地,和Hive的整合,內建函式,自定義函式】SparkSQLHive函式
- leetcode 1082典型題 ,開窗函式LeetCode函式
- [clickhouse] Clickhouse之開窗函式篇函式
- Spark Streaming--開窗函式over()Spark函式
- 常用分析函式開窗講解函式
- 簡單介紹JS函式防抖和函式節流JS函式
- Angular 14 新的 inject 函式介紹Angular函式
- einsum函式介紹-張量常用操作函式
- Python之函式的相關介紹Python函式
- Python 偏函式介紹及應用Python函式
- Hive的基本介紹以及常用函式Hive函式
- 機器學習基本函式介紹機器學習函式
- OutputStreamWriter介紹&程式碼實現和InputStreamReader介紹&程式碼實現
- 開窗函式的另外一種方式函式
- Oracle分析函式與視窗函式Oracle函式