关于在windows.partition函数中使用rangebetween

iszxjhcz  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(248)

我运行以下代码脚本

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

n7taea2i

n7taea2i1#

Window.currentRow 以及 0 应该是等效的。我想这只是偏好的问题。至于你为什么 4 ,这是因为窗口跨越 id 在当前行的值和该值加1之间,即。 1 (当前行)和 2 (加一)。三排在哪里 id1 或者 2 将包含在窗口中,因此总和为1+1+2=4。

相关问题