窗口参数:
class WindowSpec private[sql](partitionSpec: Seq[Expression],orderSpec: Seq[SortOrder],frame: WindowFrame)class WindowSpec private[sql]( partitionSpec: Seq[Expression], orderSpec: Seq[SortOrder], frame: WindowFrame)class WindowSpec private[sql]( partitionSpec: Seq[Expression], orderSpec: Seq[SortOrder], frame: WindowFrame)
1、Aggregate Functions: 聚合函数,比如:sum(…)、 max(…)、min(…)、avg(…)等.
对于窗口要求无所限制,但窗口参数具备相应的默认值:
partitionSpec
默认是 SinglePartition
(单个分区)
orderSpec
默认不排序
frame
- 当窗口缺少
orderSpec
时,默认specifiedwindowframe(RowFrame, unboundedpreceding$(), unboundedfollowing$())
- 当窗口具备
orderSpec
时,默认specifiedwindowframe(RangeFrame, unboundedpreceding$(), currentrow$())
2、Sort Functions: 排序函数 , 比如:rank()、row_number()、dense_rank() 等.
要求运行的窗口必须具备 orderSpec
,
并且 frame
必须是 specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())
frame
可以不指定,让程序默认生成
partitionSpec
默认是 SinglePartition
3、Analytics Functions: 统计和分析函数,比如:lead(…)、lag(…) 等.
要求运行的窗口必须具备 orderSpec
,
frame
要求使用 RowFrame
,
preceding
和 following
会根据 函数的offset
参数 动态变化,
例如:
lead($"id", offset = 1) over spec.orderBy("id")// specifiedwindowframe(RowFrame, 1, 1)lead($"id", offset = 3) over spec.orderBy("id")// specifiedwindowframe(RowFrame, 3, 3)lag($"id", offset = 2) over spec.orderBy("id")// specifiedwindowframe(RowFrame, -2, -2)lag($"id", offset = 4) over spec.orderBy("id")// specifiedwindowframe(RowFrame, -4, -4)lead($"id", offset = 1) over spec.orderBy("id") // specifiedwindowframe(RowFrame, 1, 1) lead($"id", offset = 3) over spec.orderBy("id") // specifiedwindowframe(RowFrame, 3, 3) lag($"id", offset = 2) over spec.orderBy("id") // specifiedwindowframe(RowFrame, -2, -2) lag($"id", offset = 4) over spec.orderBy("id") // specifiedwindowframe(RowFrame, -4, -4)lead($"id", offset = 1) over spec.orderBy("id") // specifiedwindowframe(RowFrame, 1, 1) lead($"id", offset = 3) over spec.orderBy("id") // specifiedwindowframe(RowFrame, 3, 3) lag($"id", offset = 2) over spec.orderBy("id") // specifiedwindowframe(RowFrame, -2, -2) lag($"id", offset = 4) over spec.orderBy("id") // specifiedwindowframe(RowFrame, -4, -4)
frame
可以不指定,让程序默认生成
partitionSpec
默认是 SinglePartition
不难看出,lead 和 lag 函数就是通过 frame
限制窗口的大小和位置来实现的
来源链接:https://www.cnblogs.com/blog-moondream/p/18219603
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容