关于 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
列的第四行是 4
,rangeBetween(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.currentRow
和 0
应该是等价的。我想这只是一个偏好问题。至于你为什么得到 4
,那是因为 window 介于 id
的值之间,介于当前行的值和该值加一之间,即 1
(当前行)和 2
(加一)。 id
为 1
或 2
的三行将包含在 window 中,因此总和为 1+1+2 = 4。
我运行以下代码脚本
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
列的第四行是 4
,rangeBetween(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.currentRow
和 0
应该是等价的。我想这只是一个偏好问题。至于你为什么得到 4
,那是因为 window 介于 id
的值之间,介于当前行的值和该值加一之间,即 1
(当前行)和 2
(加一)。 id
为 1
或 2
的三行将包含在 window 中,因此总和为 1+1+2 = 4。