【问题标题】:How to do a rolling sum in PySpark? [duplicate]如何在 PySpark 中进行滚动求和? [复制]
【发布时间】: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 函数,但我不明白它是如何以这种方式工作的。有关如何完成此操作的任何想法?

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

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

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

    from pyspark.sql import functions as F, Window
    
    df2 = df.withColumn('B', F.sum('A').over(Window.orderBy('ordering_col')))
    

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

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 2018-10-28
      • 1970-01-01
      • 2019-03-15
      • 2021-11-29
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2020-08-19
      相关资源
      最近更新 更多