首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >rowsBetween和rangeBetween有什么区别?

rowsBetween和rangeBetween有什么区别?
EN

Stack Overflow用户
提问于 2016-10-14 17:32:08
回答 3查看 35.8K关注 0票数 43

来自PySpark docs rangeBetween

rangeBetween(start, end) 定义框架边界,从开始(包含)到结束(包括)。 开始和结束都是相对于当前行的。例如,“0”表示“当前行”,而“-1”表示当前行之前的一个off,“5”表示当前行之后的五个off。 参数:

  • 开始-边界启动,包括。如果这是-sys.maxsize (或更低),则框架是无界的。
  • 端-边界端,包括。如果这是sys.maxsize (或更高),则框架是无界的。新版本1.4。

rowsBetween

rowsBetween(start, end) 定义框架边界,从开始(包含)到结束(包括)。 开始和结束都是当前行的相对位置。例如,“0”表示“当前行”,而“-1”表示当前行之前的行,“5”表示当前行之后的第五行。 参数:

  • 开始-边界启动,包括。如果这是-sys.maxsize (或更低),则框架是无界的。
  • 端-边界端,包括。如果这是sys.maxsize (或更高),则框架是无界的。新版本1.4。

例如,对于rangeBetween,"1 off“与"1行”有何不同?

EN

回答 3

Stack Overflow用户

发布于 2019-02-21 20:10:42

Java文档添加清晰性:https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/sql/expressions/WindowSpec.html#rowsBetween-long-long-

rangeBetween

基于范围的边界是基于表达式的顺序的实际值。偏移量用于按表达式更改ORDER的值,例如,如果当前order表达式的值为10,而下限偏移量为-3,则当前行的下界将为10-3= 7。然而,这就对按表达式排序施加了许多约束:只能有一个表达式,并且这个表达式必须有一个数字数据类型。如果偏移量是无界的,则可以做出异常,因为不需要修改值,在这种情况下,允许按表达式进行多重和非数字顺序。

rowBetween

基于行的边界基于分区内行的位置。偏移量表示当前行以上或以下的行数,当前行的框架开始或结束。例如,给定基于行的滑动框架,其下限偏移量为-1,上限偏移量为+2。索引5的行帧范围从索引4到索引6。

票数 14
EN

Stack Overflow用户

发布于 2019-10-18 19:32:11

rowsBetween:-使用rowsBetween,可以定义要计算的行的边界帧,哪个帧是独立计算的。

框架在rowsBetween中不依赖于orderBy子句.

代码语言:javascript
运行
复制
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,它们的薪资与当前框架相同。。

获得更多理解,请参见下面的示例:-

代码语言:javascript
运行
复制
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|
票数 10
EN

Stack Overflow用户

发布于 2020-11-19 22:31:49

RANGEbetween查看ORDER子句以确定某一行是否包含在窗口中。

ROWSbetween查看行的顺序。

如果ORDER在某个指定范围内,并将它们包含在窗口中,则检查之间的范围。

ROWSbetween将根据当前行周围的位置(不考虑这些行的ORDER列的值)形成窗口。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40048919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档