我在线监视几百个用户的活动,并试图获取最近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)
)
这是我得到的结果:
这就是我想要的结果:
1条答案
按热度按时间oxalkeyp1#
我想你是故意的
(-4, 0)
:因为你想包括5行,而不是6行。请注意,范围是包含的。