从Pypark医生那里 rangeBetween
: rangeBetween(start, end)
定义从开始(包含)到结束(包含)的帧边界。
开始和结束都是相对于当前行的。例如,“0”表示“当前行”,而“-1”表示当前行之前的一个关,“5”表示当前行之后的五个关。
参数:
开始–边界开始,包括在内。如果该帧为-sys.maxsize(或更低),则该帧是无界的。
结束-边界结束,包括在内。如果这是sys.maxsize(或更高),则帧是无界的。版本1.4中的新功能。
而
rowsBetween rowsBetween(start, end)
定义从开始(包含)到结束(包含)的帧边界。
起点和终点都是当前行的相对位置。例如,“0”表示“当前行”,“1”表示当前行之前的行,“5”表示当前行之后的第五行。
参数:
开始–边界开始,包括在内。如果该帧为-sys.maxsize(或更低),则该帧是无界的。
结束-边界结束,包括在内。如果这是sys.maxsize(或更高),则帧是无界的。版本1.4中的新功能。
为了 rangeBetween
例如,“1关”与“1行”有何不同?
4条答案
按热度按时间ki0zmccv1#
很简单:
ROWS BETWEEN
不关心确切的值。它只关心行的顺序,在计算帧时取固定的前后行数。RANGE BETWEEN
计算帧时考虑值。让我们使用一个使用两个窗口定义的示例:
ORDER BY x ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
ORDER BY x RANGE BETWEEN 2 PRECEDING AND CURRENT ROW
和数据作为假设当前行是第一个窗口值为31的行,则将包括以下行(当前行和前两行):
对于后面的第二个(当前的和所有前面的,其中x>=31-2):
carvr3hs2#
java spark文档更加清晰:https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/expressions/windowspec.html#rowsbetween-长的长的-
范围介于
基于范围的边界基于order by表达式的实际值。偏移量用于更改order by表达式的值,例如,如果当前order by表达式的值为10,并且下限偏移量为-3,则当前行的结果下限将为10-3=7。但是,这会对order by表达式施加许多约束:只能有一个表达式,并且该表达式必须具有数字数据类型。偏移量为无界时会出现异常,因为不需要修改值,在这种情况下,允许使用多个和非数字的order by表达式。
划船
基于行的边界基于行在分区中的位置。偏移量表示当前行上方或下方的行数,当前行的帧开始或结束。例如,给定一个基于行的滑动帧,其下限偏移量为-1,上限偏移量为+2。索引为5的行的帧的范围从索引4到索引6。
wxclj1h53#
rowsbetween:-使用rowsbetween定义要计算的行的边界帧,该帧是独立计算的。
rowsbetween中的框架不依赖于orderby子句。
rangebetween:—使用rangebetween,可以定义要计算的行的边界框,该边界框可能会更改。
rangebetween中的框架依赖于orderby子句。rangebetween将包含orderby子句中具有相同值的所有行,如gordon、gracie和cellie具有相同的薪水,因此包含在当前帧中。
有关更多了解,请参见以下示例:-
55ooxyrt4#
rangebetween查看order by子句以确定窗口中是否包含行。
rowsbetween查看行的顺序。
检查之间的范围如果order by在某个指定的范围内,则将在窗口中包含它们。
rowsbetween将根据当前行周围的行位置形成窗口(不考虑这些行的order by列的值)