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

5us2dqdw  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(592)

在我的应用程序中,为用户执行的每个操作生成事件,并使用以下格式的数据生成事件-
用户|步骤|数字|事件|时间戳
这些事件的流化顺序并不完全严格,即在捕获用户1的所有事件之前,我们可能会将用户2的数据流化。
样本数据
u1,12020-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
2020年5月30日00:00:03
....
您将如何实现任何流解决方案来计算每个步骤所用的平均时间。我们可以假设用户为每个步骤花费的总时间为(步骤1的时间戳-步骤0的时间戳)。
我正在使用spark streaming构建解决方案,但是找不到任何东西来计算统计数据,这些数据来自按属性分组的2个事件(在我的例子中是user\ id)。想知道是否有任何其他流媒体技术,如Flink,Kafka等可用的解决方案。

tkclm6bt

tkclm6bt1#

使用flink可以通过多种方式实现,但一种方法是使用flink sql和match\u 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

相关问题