在pyspark中聚合5分钟的窗口



我有以下数据框df:

User | Datetime         | amount | length
A    | 2016-01-01 12:01 | 10     | 20
A    | 2016-01-01 12:03 | 6      | 10
A    | 2016-01-01 12:05 | 1      | 3
A    | 2016-01-01 12:06 | 3      | 5
B    | 2016-01-01 12:01 | 10     | 20
B    | 2016-01-01 12:02 | 8      | 20

我想使用pyspark高效地聚合超过5分钟的时间窗口并做一些计算-例如计算平均金额&每次使用的长度,每5分钟的时间窗口- df看起来像这样:

User | Datetime         | amount | length
A    | 2016-01-01 12:00 | 8      | 15
B    | 2016-01-01 12:00 | 2      | 4
A    | 2016-01-01 12:05 | 9      | 20

我怎样才能以最有效的方式做到这一点?在pandas中,我使用:

df.groupby(['cs_username', pd.TimeGrouper('5Min')].apply(...)

不幸的是,在pyspark中,这看起来不像在pandas中那么酷;-)您可以尝试将日期转换为时间戳并使用模,例如:

import pyspark.sql.functions as F
seconds = 300
seconds_window = F.from_unixtime(F.unix_timestamp('date') - F.unix_timestamp('date') % seconds)
dataframe.withColumn('5_minutes_window', seconds_window)

然后您可以简单地按新列分组并执行请求的聚合。

相关内容

  • 没有找到相关文章