Pyspark Pypark中的累积移动平均值

Pyspark Pypark中的累积移动平均值,pyspark,Pyspark,我有一个数据帧: df = spark.createDataFrame([(1, 30),(2, 40),(3, 50)],["rank", "value"]) 这些行是按等级排序的,我想添加一个列,该列具有每行中值列的累积移动平均值 在该示例中,第一行将有30(30/1)、第二行35((30+40)/2)和第三行40((30+40+50)/3) 我可以通过使用窗口来完成此操作: w = (Window.orderBy(F.col("rank&

我有一个数据帧:

df = spark.createDataFrame([(1, 30),(2, 40),(3, 50)],["rank", "value"])
这些行是按等级排序的,我想添加一个列,该列具有每行中值列的累积移动平均值

在该示例中,第一行将有30(30/1)、第二行35((30+40)/2)和第三行40((30+40+50)/3)

我可以通过使用窗口来完成此操作:

w = (Window.orderBy(F.col("rank")).rangeBetween(-100, 0))
df_with_cma = df.withColumn('avg_val', F.avg("value").over(w))
问题是,我的实际数据集非常大(约5000万行),而且由于使用窗口强制使用单个节点,这需要很长时间(我在几个小时后停止了该过程)

有人能提出更好的方法吗

具体来说,如果我可以添加一个列,它是前面几行的平均值(prev_line_avg),那么我可以添加一个

(上一行平均值*(秩-1)+值)/秩

因此,不必每次都检查前面的所有值

只是我不知道如果不先添加一个平均值的列,我是否/如何才能添加prev_line_avg,它需要prev_line_avg,然后我们进入无限递归(鸡和蛋的问题)

帮忙

谢谢你