【问题标题】:regarding the usage of rangebetween in Windows.Partition function关于windows.Partition函数中rangebetween的使用
【发布时间】: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 列的第四行是4rangeBetween(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()

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql window-functions


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 2016-01-17
      • 2018-01-13
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多