Spark SQL应用系列:窗口函数
(TODO)
概述
使用窗口函数时,每条记录(record)都有一组记录与其相关联,我们把这组记录称为当前记录的数据帧(Frame)。窗口函数基于当前记录的数据帧,为其计算相应返回值。
窗口函数
哪些函数可用于窗口函数
Spark SQL支持三种窗口函数:
- 排名函数
- 分析函数
- 聚合函数
排名函数
SQL | DataFrame | 含义 |
---|---|---|
rank | rank | |
dense_rank | denseRank | |
percent_rank | percentRank | |
ntile | ntile | |
row_number | rowNumber |
分析函数
SQL | DataFrame | 含义 |
---|---|---|
cume_dist | cumeDist | |
first_value | firstValue | |
last_value | lastValue | |
lag | lag | |
lead | lead |
聚合函数
(略)
应用窗口函数
- SQL
- DataFrame
定义窗口
窗口规范定义了哪些行会被包含进给定行所关联的数据帧。窗口规范中包含有三部分:分区定义、排序定义、数据帧定义。
OVER (PARTITION BY ... ORDER BY ...)
定义分区
分区规范控制了哪些行会被分区到一起。如果不指定分区,那么所有数据会被收集到一台机器上。
定义排序
排序规范控制了数据在分区内的排序方式,确定了数据在分区内的物理位置。
定义数据帧
数据帧描述了当前行所关联的数据帧包含哪些记录行。定义数据帧需要指定:起始边界、结束边界、以及帧类型。
边界
- UNBOUNDED PRECEDING、UNBOUNDED FOLLOWING:分别表示分区内第一行和分区内最后一行;
- CURRENT ROW:表示当前行;
- {n} PRECEDING、{n} FOLLOWING:其中,
n
表示距离当前行所在位置的偏移量,这两种边界所表达的具体含义根据数据帧类型而有所不同;