来自PySpark docs rangeBetween
rangeBetween(start, end)
定义框架边界,从开始(包含)到结束(包括)。 开始和结束都是相对于当前行的。例如,“0”表示“当前行”,而“-1”表示当前行之前的一个off,“5”表示当前行之后的五个off。 参数:
rowsBetween(start, end)
定义框架边界,从开始(包含)到结束(包括)。 开始和结束都是当前行的相对位置。例如,“0”表示“当前行”,而“-1”表示当前行之前的行,“5”表示当前行之后的第五行。 参数:
例如,对于rangeBetween
,"1 off“与"1行”有何不同?
发布于 2019-02-21 20:10:42
rangeBetween
基于范围的边界是基于表达式的顺序的实际值。偏移量用于按表达式更改ORDER的值,例如,如果当前order表达式的值为10,而下限偏移量为-3,则当前行的下界将为10-3= 7。然而,这就对按表达式排序施加了许多约束:只能有一个表达式,并且这个表达式必须有一个数字数据类型。如果偏移量是无界的,则可以做出异常,因为不需要修改值,在这种情况下,允许按表达式进行多重和非数字顺序。
rowBetween
基于行的边界基于分区内行的位置。偏移量表示当前行以上或以下的行数,当前行的框架开始或结束。例如,给定基于行的滑动框架,其下限偏移量为-1,上限偏移量为+2。索引5的行帧范围从索引4到索引6。
发布于 2019-10-18 19:32:11
rowsBetween:-使用rowsBetween,可以定义要计算的行的边界帧,哪个帧是独立计算的。
框架在rowsBetween中不依赖于orderBy子句.
df = spark.read.csv(r'C:\Users\akashSaini\Desktop\TT.csv',inferSchema =True, header=True).na.drop()
w =Window.partitionBy('DEPARTMENT').orderBy('SALARY').rowsBetween(Window.unboundedPreceding,Window.currentRow)
df.withColumn('RowsBetween', F.sum(df.SALARY).over(w)).show()
first_name|Department|Salary|RowsBetween|
Sofia| Sales| 20000| 20000|
Gordon| Sales| 25000| 45000|
Gracie| Sales| 25000| 70000|
Cellie| Sales| 25000| 95000|
Jervis| Sales| 30000|125000|
Akash| Analysis| 30000| 30000|
Richard| Account| 12000| 12000|
Joelly| Account| 15000| 27000|
Carmiae| Account| 15000| 42000|
Bob| Account| 20000| 62000|
Gally| Account| 28000| 90000
rangeBetween:-使用rangeBetween,定义要计算的行的边界帧,这可能会更改.。
框架在rangeBetween中依赖于orderBy子句。rangeBetween将包括在orderBy子句中具有相同值的所有行,如Gordon、Gracie和Cellie,它们的薪资与当前框架相同。。
获得更多理解,请参见下面的示例:-
df = spark.read.csv(r'C:\Users\asaini28.EAD\Desktop\TT.csv',inferSchema =True, header=True).na.drop()
w =Window.partitionBy('DEPARTMENT').orderBy('SALARY').rangeBetween(Window.unboundedPreceding,Window.currentRow)
df.withColumn('RangeBetween', F.sum(df.SALARY).over(w)).select('first_name','Department','Salary','Test').show()
first_name|Department|Salary|RangeBetween|
Sofia| Sales| 20000| 20000|
Gordon| Sales| 25000| 95000|
Gracie| Sales| 25000| 95000|
Cellie| Sales| 25000| 95000|
Jervis| Sales| 30000|125000|
Akash| Analysis| 30000| 30000|
Richard| Account| 12000| 12000|
Joelly| Account| 15000| 42000|
Carmiae| Account| 15000| 42000|
Bob| Account| 20000| 62000|
Gally| Account| 28000| 90000|
发布于 2020-11-19 22:31:49
RANGEbetween查看ORDER子句以确定某一行是否包含在窗口中。
ROWSbetween查看行的顺序。
如果ORDER在某个指定范围内,并将它们包含在窗口中,则检查之间的范围。
ROWSbetween将根据当前行周围的位置(不考虑这些行的ORDER列的值)形成窗口。
https://stackoverflow.com/questions/40048919
复制相似问题