如何在 PySpark 中进行滚动求和? [复制]

Posted

技术标签:

【中文标题】如何在 PySpark 中进行滚动求和? [复制]【英文标题】:How to do a rolling sum in PySpark? [duplicate] 【发布时间】:2021-02-11 16:05:59 【问题描述】:

鉴于列 A 如下例所示,我希望列 B 中的每条记录是 A 中的当前记录和 B 中的先前记录的总和:

+-------+
| A | B |
+-------+
| 0 | 0 |
| 0 | 0 |
| 1 | 1 |
| 0 | 1 | 
| 1 | 2 |  
| 1 | 3 | 
| 0 | 3 | 
| 0 | 3 | 

因此,在某种程度上,我有兴趣将以前的记录考虑到我的操作中。我知道F.lag 函数,但我不明白它是如何以这种方式工作的。有关如何完成此操作的任何想法?

如果这个想法可以以更好的方式表达,我愿意​​改写。

【问题讨论】:

【参考方案1】:

您似乎正在尝试对 A 进行滚动求和。您可以在窗口上进行求和,例如

from pyspark.sql import functions as F, Window

df2 = df.withColumn('B', F.sum('A').over(Window.orderBy('ordering_col')))

但是您需要一个列来排序,否则“先前记录”的定义不明确,因为 Spark 数据帧是无序的。

【讨论】:

以上是关于如何在 PySpark 中进行滚动求和? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 pyspark 中对大量列进行累积求和的优化方法

如何在 pyspark 中对 spark 数据框中的多列求和?

如何在 pyspark 中对 spark 数据框中的多列求和?

Pyspark:如何编写复杂的 Dataframe 算法问题(带条件求和)

Pyspark数据框:对一列求和,同时对另一列进行分组

如何在 PySpark 中计算不同窗口大小的滚动总和