计算流数据集中事件之间的时间差

问题描述 投票:0回答:1

在我的应用程序中,将为用户执行的每个操作生成事件,并使用以下格式的数据生成事件-

user_id | step_num | event_timestamp

流这些事件的顺序并不完全严格,也就是说,在捕获用户1的所有事件之前,我们可能已经流了用户2的数据。

样本数据

u1,1,2020-05-30 00:00:01

u1,2,2020-05-30 00:00:02

u2,1,2020-05-30 00:00:02

u3,1,2020-05-30 00:00:02

u1,3,2020-05-30 00:00:03

....

您将如何实施任何流媒体解决方案来计算每个步骤花费的平均时间。我们可以假设用户为每一步花费的总时间为(time_stamp_at_step_1-time_stamp_at_step_0)。

我正在使用Spark Streaming构建解决方案,但无法找到任何东西来计算统计信息,该统计信息是将2个事件的数据按属性分组(在我的情况下为user_id)。很想知道其他流媒体技术(例如Flink,Kafka等)是否有可用的解决方案。

spark-streaming distributed-computing flink-streaming
1个回答
0
投票

这可以通过Flink以多种方式完成,但是一种方法是将Flink SQL与MATCH_RECOGNIZE一起使用:

SELECT step_num, AVG(seconds)
FROM events
MATCH_RECOGNIZE (
    PARTITION BY userId
    ORDER BY eventTime
    MEASURES
        this_step.userId as id
        this_step.step AS step_num
        TIMESTAMPDIFF(SECOND, this_step.eventTime, next_step.eventTime) AS seconds
    AFTER MATCH SKIP TO LAST next_step
    PATTERN (this_step next_step)
    DEFINE
        this_step AS TRUE,
        next_step AS next_step.step = this_step.step + 1
)
GROUP BY step_num
© www.soinside.com 2019 - 2024. All rights reserved.