首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PySpark :在n个元素上做一个简单的滑动窗口,并通过一个函数聚合

PySpark :在n个元素上做一个简单的滑动窗口,并通过一个函数聚合
EN

Stack Overflow用户
提问于 2020-06-24 16:17:20
回答 1查看 1.1K关注 0票数 0

我知道这个主题已经发表了,但我仍然不理解pyspark中的windows函数。我只想在一个pyspsark数据框架上这样做:data.rolling(5).agg('sum'),->,这是在Pandas中。

我要的是火花源。不需要groupby或orderby,只需在列上滑动窗口并计算sum (或我自己的函数)。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
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

结果:

代码语言:javascript
代码运行次数:0
运行
复制
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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-24 16:52:50

您可以通过创建单个窗口并限制要聚合的行来实现此目的

代码语言:javascript
代码运行次数:0
运行
复制
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|
+---+---+

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62550625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档