我有一个带有事件\时间字段的文件,每个记录每30分钟生成一次,并指示事件持续了多少秒。例子:
Event_time | event_duration_seconds
09:00 | 800
09:30 | 1800
10:00 | 2700
12:00 | 1000
13:00 | 1000
我需要把连续的事件转换成只有一个持续时间的事件。输出文件应如下所示:
Event_time_start | event_time_end | event_duration_seconds
09:00 | 11:00 | 5300
12:00 | 12:30 | 1000
13:00 | 13:30 | 1000
scala spark中有没有一种方法可以将一个Dataframe记录与下一个Dataframe记录进行比较?
我试过了 foreach
但是循环不是一个好的选择,因为它需要处理大量的数据
1条答案
按热度按时间yc0p9oo01#
这不是一个小问题,但这里有一个解决方案,其步骤如下:
创建自定义项以计算下一个最近的30分钟事件结束时间
event_ts_end
使用java.time
应用程序编程接口使用窗口功能
lag
上一行的事件时间使用
when/otherwise
生成列event_ts_start
用一个null
如果与前一行的事件时间差为30分钟,则返回值使用窗口功能
last(event_ts_start, ignoreNulls=true)
回填null
最后一个是什么event_ts_start
价值数据分组依据
event_ts_start
聚集event_duration
以及event_ts_end
首先,让我们组装一个示例数据集:请注意,示例数据集已稍微泛化为包含多个事件,并使事件时间包含
date
涵盖某个事件跨越给定日期的案例的信息。步骤
1
:步骤
2 - 5
: