【发布时间】:2019-10-10 17:40:50
【问题描述】:
我想使用一个窗口来计算当前结果之前最后 5 个结果的平均值。
例如,如果我有一个带有结果的数据框,mean_last_5 将如下所示:
Result Mean_last_5
1. 4 NaN
2. 2 NaN
3. 6 NaN
4. 3 NaN
5. 2 NaN
6. 6 3.4
7. 3 3.8
第 6 行将计算为:(4+2+6+3+2)/5 = 3.4。
所以在熊猫方面,我会滚动窗口为 5,移位为 1。
对于 PySpark,我只是不知道如何做到这一点。当前代码:
def mean_last_5(df):
window = Window.partitionBy('Id').orderBy('year').rangeBetween(Window.currentRow-5, Window.currentRow)
return df.withColumn('mean_last_5', sf.avg('result').over(window))
错误:
由于数据类型不匹配而无法解析:具有值边界的范围窗口框架不能在具有多个 order by 表达式的窗口规范中使用:
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql