如何获得pysparkDataframe中最后5行的平均值

r1zhe5dt  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(309)

我在线监视几百个用户的活动,并试图获取最近5行的平均记录(忽略中间缺少的日期)。我正在使用 Window.partitionBy 在用户和 rowsBetween 为了得到最后5条记录,但不是给我以后每行最后5条记录的平均值,而是把所有其他行都包括在平均值中。
这就是我尝试过的:

from pyspark.sql import functions as f
from pyspark.sql.window import Window

win = Window.partitionBy('user_id').orderBy(f.col('record_date')).rowsBetween(-5, 0)

test = df.sort(
  f.asc('record_date')
).withColumn(
  'last5_avg', f.mean('total').over(win)
)

这是我得到的结果:

这就是我想要的结果:

oxalkeyp

oxalkeyp1#

我想你是故意的 (-4, 0) :

win = Window.partitionBy('user_id').orderBy(f.col('record_date')).rowsBetween(-4, 0)

因为你想包括5行,而不是6行。请注意,范围是包含的。

相关问题