相关疑难解决方法(0)

如何使用Spark在组中滚动时间窗口

我有一些数据要按特定列分组,然后根据组中的滚动时间窗口聚合一系列字段.

以下是一些示例数据:

df = spark.createDataFrame([Row(date='2016-01-01', group_by='group1', get_avg=5, get_first=1),
                            Row(date='2016-01-10', group_by='group1', get_avg=5, get_first=2),
                            Row(date='2016-02-01', group_by='group2', get_avg=10, get_first=3),
                            Row(date='2016-02-28', group_by='group2', get_avg=20, get_first=3),
                            Row(date='2016-02-29', group_by='group2', get_avg=30, get_first=3),
                            Row(date='2016-04-02', group_by='group2', get_avg=8, get_first=4)])
Run Code Online (Sandbox Code Playgroud)

我想分组group_by,然后创建时间窗口,从最早的日期开始,并延长到30天没有该组的条目.在这30天结束后,下一个时间窗口将从下一行的日期开始,该日期不会落在上一个窗口中.

然后我想聚合,例如获得平均值get_avg和第一个结果get_first.

所以这个例子的输出应该是:

group_by    first date of window    get_avg  get_first
group1      2016-01-01              5        1
group2      2016-02-01              20       3
group2      2016-04-02              8        4
Run Code Online (Sandbox Code Playgroud)

编辑:对不起我意识到我的问题没有正确指定.我实际上想要一个在30天不活动后结束的窗口.我相应地修改了示例的group2部分.

sql window-functions apache-spark apache-spark-sql pyspark

8
推荐指数
1
解决办法
1万
查看次数