【发布时间】:2021-11-10 10:03:39
【问题描述】:
我有一个和How to group by time interval in Spark SQL非常相似的问题
但是,我的指标是花费的时间 (duration),所以我的数据看起来像
KEY |Event_Type | duration | Time
001 |event1 | 10 | 2016-05-01 10:49:51
002 |event2 | 100 | 2016-05-01 10:50:53
001 |event3 | 20 | 2016-05-01 10:50:55
001 |event1 | 15 | 2016-05-01 10:51:50
003 |event1 | 13 | 2016-05-01 10:55:30
001 |event2 | 12 | 2016-05-01 10:57:00
001 |event3 | 11 | 2016-05-01 11:00:01
有没有办法将花费的时间汇总到五分钟的桶中,按键分组,并知道持续时间何时超出桶的界限?
例如,第一行从 10:49:51 开始,到 10:50:01 结束
因此,窗口[2016-05-01 10:45:00.0,2016-05-01 10:50:00.0] 中键 001 的存储桶将获得 8 秒的持续时间(51 秒到 60 秒),而 10:50 到 10:55 将获得 2 秒的持续时间,加上来自其他日志的相关秒数行(第三行 20 秒,第四行 15 秒)。
我想对特定存储桶中的时间求和,但另一个线程上的解决方案
df.groupBy($"KEY", window($"time", "5 minutes")).sum("metric")
将在桶中高估与桶开始重叠的时间戳,并低估后续桶
注意:我的 Time 列也是像 1636503077 这样的 Epoch 时间戳,但如果这样可以更轻松地进行计算,我可以轻松地将其转换为上述格式。
【问题讨论】:
标签: scala apache-spark