这篇梳理一下sparksql实现窗口函数用到的类。
select
a,
row_number() over(partition by a order by b desc ) as rn
from testdata2
上面的语句主要分两部分
-
window函数部分(row_number)
-
窗口定义部分(over)
select a, row_number() over(partition by a order by b desc ) as rn from testdata2 --------unresolved logical plan-------- 'Project ['a, 'row_number() windowspecdefinition('a, 'b DESC NULLS LAST, unspecifiedframe$()) AS rn#10] +- 'UnresolvedRelation [testdata2], [], false
从执行计划能够了解到sparksql描述窗口函数时用到的类的结构。
窗口函数的类结构
WindowExpression :描述该expression是一个windowExpression,继承BinaryLike,是一个二元树。
1、window函数部分--windowFunction
windows函数部分就是所要在窗口上执行的函数。
WindowFunction
-
AggregateWindowFunction --聚合函数、分析窗口函数(Analytic functions)cume_dist函数计算当前值在窗口中的百分位数
-
OffsetWindowFunction --位移(lag、lead),非聚合函数