大数据全系列 教程
1869个小节阅读:468k
目录
408考研
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
需求:读取data/sql/score.csv文件,演示开窗函数的使用。
xxxxxxxxxx
package com.itbaizhan.sql.deffun
import org.apache.spark.sql.expressions.{Aggregator, MutableAggregationBuffer, UserDefinedAggregateFunction}
import org.apache.spark.sql.types.{DataType, IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{DataFrame, Encoder, Encoders, Row, SparkSession, functions}
object OpenWindowFunction {
def main(args: Array[String]): Unit = {
//1.创建SparkSession对象
val spark: SparkSession = SparkSession.builder()
.master("local[*]")
.appName("OpenWindowFunction")
.getOrCreate()
//3.读取json文件
val df: DataFrame = spark.read.json("data/sql/score.json")
//4.注册视图
df.createOrReplaceTempView("tb_score")
//5.聚合开窗函数
//5.1.在每行信息后面显示全部成绩的平均分
println("avg(score) over() as avg_score")
spark.sql(
"""
|select id,name,project,score,
| avg(score) over() as avg_score
|from tb_score
|""".stripMargin).show()
//5.2.在每行信息后面显示当前科目的平均分
println("avg(score) over(partition by project) as avg_score")
spark.sql(
"""
|select id,name,project,score,
| avg(score) over(partition by project) as avg_score
|from tb_score
|""".stripMargin).show()
//6.排序开窗函数
//6.1row_number排序开窗函数:值同名次不同,序号不间断
println("------row_number-----")
spark.sql(
"""
|select id,name,project,score,
| row_number() over(order by score desc) as rn
|from tb_score
|""".stripMargin).show()
//6.2 dense_rank:值同名次同,序号不间断
println("------dense_rank-----")
spark.sql(
"""
|select id,name,project,score,
| dense_rank() over(order by score desc) as dr
|from tb_score
|""".stripMargin).show()
//6.3. rank: 值同名次同,序号间断
println("------rank-----")
spark.sql(
"""
|select id,name,project,score,
| rank() over(order by score desc) as rk
|from tb_score
|""".stripMargin).show()
//2.关闭
spark.close()
}
}