PySpark:对 n 个元素进行简单的滑动 window 并通过函数进行聚合

PySpark : Do a simple sliding window on n elements and aggregate by a function

我知道这个主题已经发布了,但我仍然不明白 pyspark 中的 windows 功能。 我只想在 pyspsark 数据帧上执行此操作: data.rolling(5).agg('sum') -> 这是在 Pandas.

我想要它在 pyspark 中。无需 groupby 或 orderby,只需在列上滑动 window 并计算总和(或我自己的函数)。

示例:

df = pd.DataFrame({'A': [1,1,2,2,1,2],
                    'B': [2,2,3,4,2,1]})

print(df)
   A  B
0  1  2
1  1  2
2  2  3
3  2  4
4  1  2
5  2  1

结果:

print(df.rolling(3).agg('sum'))
     A    B
0  NaN  NaN
1  NaN  NaN
2  4.0  7.0
3  5.0  9.0
4  5.0  9.0
5  5.0  7.0

谢谢

您可以通过创建单个 window 并将行限制为聚合来实现此目的

from pyspark.sql import Window
from pyspark.sql.functions import *


df1.show()
+---+---+
| v1| v2|
+---+---+
|  1|  2|
|  1|  4|
|  2|  2|
|  2|  4|
|  2|  4|
|  2|  4|
|  2|  4|
|  2|  4|
+---+---+


w = Window().partitionBy(lit(1)).rowsBetween(-2,0)
df1.select(sum('v1').over(w).alias('v1'),sum('v2').over(w).alias('v2')).show()

+---+---+
| v1| v2|
+---+---+
|  1|  2|
|  2|  6|
|  4|  8|
|  5| 10|
|  6| 10|
|  6| 12|
|  6| 12|
|  6| 12|
+---+---+

如果需要,您可以显式设置前两行为空