关于 Windows.Partition 函数中 rangebetween 的使用

regarding the usage of rangebetween in Windows.Partition function

我运行以下代码脚本

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()

于是就有了下面的window分区,结果如下图。我对如何使用 rangebeween. 生成此结果感到困惑 例如,为什么 sum 列的第四行是 4rangeBetween(Window.currentRow, 1) 如何获得 4。此外,根据 Spark 文档, Window.currentRow定义为0,为什么代码没有用0代替。

window = Window.partitionBy("category").orderBy("id").rangeBetween(Window.currentRow, 1)
df.withColumn("sum", func.sum("id").over(window)).show()

Window.currentRow0 应该是等价的。我想这只是一个偏好问题。至于你为什么得到 4,那是因为 window 介于 id 的值之间,介于当前行的值和该值加一之间,即 1 (当前行)和 2(加一)。 id12 的三行将包含在 window 中,因此总和为 1+1+2 = 4。