Apache spark 如何在PySpark中进行滚动求和?
给定列Apache spark 如何在PySpark中进行滚动求和?,apache-spark,pyspark,Apache Spark,Pyspark,给定列A,如以下示例所示,我希望列B,其中每个记录是A中当前记录和B中以前记录的总和: +-------+ | A | B | +-------+ | 0 | 0 | | 0 | 0 | | 1 | 1 | | 0 | 1 | | 1 | 2 | | 1 | 3 | | 0 | 3 | | 0 | 3 | 在某种程度上,我会有兴趣考虑以前的记录到我的手术中。我知道F.lag函数,但我不知道它是如何以这种方式工作的。关于如何完成这个手术有什么想法吗 如果这个想法可以用更好的方式表达,
A
,如以下示例所示,我希望列B
,其中每个记录是A中当前记录和B中以前记录的总和:
+-------+
| A | B |
+-------+
| 0 | 0 |
| 0 | 0 |
| 1 | 1 |
| 0 | 1 |
| 1 | 2 |
| 1 | 3 |
| 0 | 3 |
| 0 | 3 |
在某种程度上,我会有兴趣考虑以前的记录到我的手术中。我知道F.lag
函数,但我不知道它是如何以这种方式工作的。关于如何完成这个手术有什么想法吗
如果这个想法可以用更好的方式表达,我愿意重新措辞。你似乎在尝试做a的滚动求和。你可以在窗口上求和,例如
from pyspark.sql import functions as F, Window
df2 = df.withColumn('B', F.sum('A').over(Window.orderBy('ordering_col')))
但是您需要一个列来进行排序,否则“先前的记录”就没有很好的定义,因为Spark数据帧是无序的