关于windows.Partition函数中rangebetween的使用
Posted
技术标签:
【中文标题】关于windows.Partition函数中rangebetween的使用【英文标题】:regarding the usage of rangebetween in Windows.Partition function 【发布时间】:2021-03-31 22:33:51 【问题描述】:我运行以下代码脚本
from pyspark.sql import Window
from pyspark.sql import functions as func
from pyspark.sql import SQLContext
from pyspark import SparkContext
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)
tup = [(1, "a"), (1, "a"), (2, "a"), (1, "b"), (2, "b"), (3, "b")]
df = sqlContext.createDataFrame(tup, ["id", "category"])
df.show()
然后有如下窗口分区,结果如下图。我对如何使用rangebeween.
生成此结果感到困惑,例如,为什么sum
列的第四行是4
,rangeBetween(Window.currentRow, 1)
如何获得4
的值。此外,根据 Spark doc,
Window.currentRow
被定义为0
,为什么代码没有使用0
来代替。
window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
df.withColumn("sum", func.sum("id").over(window)).show()
【问题讨论】:
【参考方案1】:Window.currentRow
和 0
应该是等价的。我想这只是一个偏好问题。至于为什么你得到4
,那是因为窗口跨越id
的值在当前行的值和该值加一之间,即1
(当前行)和2
(加一)。 id
为 1
或 2
的三行将包含在窗口中,因此总和为 1+1+2 = 4。
【讨论】:
以上是关于关于windows.Partition函数中rangebetween的使用的主要内容,如果未能解决你的问题,请参考以下文章
hive 中row_number(),rank,dense_ran()的用法
将gsl_ran_hypergeometric_pdf(k,n1,n2,t)转换为boost :: math :: hypergeometric_distribution