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函式
- SparkSQL---開窗函式(java)SparkSQL函式Java
- mysql實現開窗函式MySql函式
- 【Spark篇】---SparkSQL中自定義UDF和UDAF,開窗函式的應用SparkSQL函式
- 微軟外服工作札記③——視窗函式的介紹微軟函式
- ORACLE函式介紹Oracle函式
- TypeScript 函式介紹TypeScript函式
- stoi函式介紹函式
- Spark 開窗函式Spark函式
- 【Spark篇】---SparkSql之UDF函式和UDAF函式SparkSQL函式
- oracle常用函式介紹Oracle函式
- 機器學習基本函式介紹機器學習函式
- replaceChild()函式用法介紹函式
- lpad函式介紹函式
- oracle REPLACE 函式 介紹Oracle函式
- oracle 日期函式介紹Oracle函式
- CUDA常用函式介紹函式
- Trim() 函式的介紹函式
- GCD、dispatch 函式介紹GC函式
- cuda函式庫介紹函式
- 【函式】Oracle TRIM函式語法介紹函式Oracle
- Spark SQL 開窗函式SparkSQL函式
- Spark操作開窗函式Spark函式
- 開窗函式彙總函式
- 函式表示式和函式宣告簡單介紹函式
- PostgreSQL之SQL函式介紹及實踐(一)SQL函式
- 介紹PHP中的10個實用函式PHP函式
- Dart建構函式介紹Dart函式
- javascript函式中with的介紹JavaScript函式
- funclib函式庫介紹函式
- 網路常用函式介紹函式
- Oracle 的基本函式介紹Oracle函式
- prototype.js函式介紹JS函式
- oracle的分析函式over 及開窗函式Oracle函式
- Signal ()函式詳細介紹 Linux函式函式Linux
- 幾種常見窗函式及其MATLAB實現函式Matlab