如何在 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 中对 spark 数据框中的多列求和?
如何在 pyspark 中对 spark 数据框中的多列求和?