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|
+---+---+
如果需要,您可以显式设置前两行为空
我知道这个主题已经发布了,但我仍然不明白 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|
+---+---+
如果需要,您可以显式设置前两行为空