spark如何计算给定窗口间隔的窗口开始时间?

问题描述

考虑我有一个带有时间戳字段列的输入 df 并且在将窗口持续时间(没有滑动间隔)设置为:

10 分钟

输入时间(2019-02-28 22:33:02)
形成的窗口为(2019-02-28 22:30:02) to (2019-02-28 22:40:02)

8 分钟

输入相同的时间(2019-02-28 22:33:02)
形成的窗口为(2019-02-28 22:26:02) to (2019-02-28 22:34:02)

5 分钟

输入相同的时间(2019-02-28 22:33:02)
形成的窗口为(2019-02-28 22:30:02) to (2019-02-28 22:35:02)

14 分钟

输入时间(2019-02-28 22:33:02)
形成的窗口为(2019-02-28 22:32:02) to (2019-02-28 22:46:02)


所以,我的问题是:

spark 如何计算给定输入 ts 的窗口的开始时间?

解决方法

O'Reilly 出版的“Stream Processing with Apache Spark”一书中的“Understanding How Intervals are computing”部分对此进行了解释:

“窗口间隔与所用时间单位的下一个”相对应的秒/分钟/小时/天的开始时间对齐。”

在您的情况下,您总是使用分钟,因此下一个时间幅度是“小时”。因此它试图到达小时的开始。您的案例更详细(忘记 2 秒,这只是内部延迟):

  • 10 分钟:22:40 + 10 + 10 -> 小时开始
  • 8 分钟:22:34 + 8 + 8 + 8 -> 小时开始
  • 5 分钟:22:35 + 5 + 5 + ... + 5 -> 小时开始
  • 14 分钟:22:46 + 14 -> 小时开始

它独立于传入的数据及其时间戳/事件时间。

作为一个附加节点,下窗口边界是inclusive,而上边界是exclusive。在数学符号中,这看起来像 [start_time,end_time)