【发布时间】:2020-08-16 17:25:35
【问题描述】:
我正在尝试计算 Pyspark 中的滚动平均值。我让它工作,但它的行为似乎与我预期的不同。滚动平均值从第一行开始。
例如:
columns = ['month', 'day', 'value']
data = [('JAN', '01', '20000'), ('JAN', '02', '40000'), ('JAN', '03', '30000'), ('JAN', '04', '25000'), ('JAN', '05', '5000'), ('JAN', '06', '15000'),
('FEB', '01', '10000'), ('FEB', '02', '50000'), ('FEB', '03', '100000'), ('FEB', '04', '60000'), ('FEB', '05', '1000'), ('FEB', '06', '10000'),]
df_test = sc.createDataFrame(data).toDF(*columns)
win = Window.partitionBy('month').orderBy('day').rowsBetween(-2,0)
df_test.withColumn('rolling_average', f.avg('value').over(win)).show()
+-----+---+------+------------------+
|month|day| value| rolling_average|
+-----+---+------+------------------+
| JAN| 01| 20000| 20000.0|
| JAN| 02| 40000| 30000.0|
| JAN| 03| 30000| 30000.0|
| JAN| 04| 25000|31666.666666666668|
| JAN| 05| 5000| 20000.0|
| JAN| 06| 15000| 15000.0|
| FEB| 01| 10000| 10000.0|
| FEB| 02| 50000| 30000.0|
| FEB| 03|100000|53333.333333333336|
| FEB| 04| 60000| 70000.0|
| FEB| 05| 1000|53666.666666666664|
| FEB| 06| 10000|23666.666666666668|
+-----+---+------+------------------+
这将更符合我的预期。有没有办法得到这种行为?
+-----+---+------+------------------+
|month|day| value| rolling_average|
+-----+---+------+------------------+
| JAN| 01| 20000| null|
| JAN| 02| 40000| null|
| JAN| 03| 30000| 30000.0|
| JAN| 04| 25000|31666.666666666668|
| JAN| 05| 5000| 20000.0|
| JAN| 06| 15000| 15000.0|
| FEB| 01| 10000| null|
| FEB| 02| 50000| null|
| FEB| 03|100000|53333.333333333336|
| FEB| 04| 60000| 70000.0|
| FEB| 05| 1000|53666.666666666664|
| FEB| 06| 10000|23666.666666666668|
+-----+---+------+------------------+
默认行为的问题是我需要另一列来跟踪延迟应该从哪里开始。
【问题讨论】:
标签: pyspark