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

How spark calculates the window start time with given window interval?

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

10 分钟

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

8分钟

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

5分钟

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

14分钟

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


所以,我的问题是:

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

这在 O'Reilly 出版的“使用 Apache Spark 进行流处理”一书中的“了解间隔的计算方式”部分进行了解释:

"The window intervals are aligned to the start of the second/minute/hour/day that corresponds to the next" upper time magnitude of the time unit used."

在你的例子中,你总是使用分钟,所以下一个更高的时间量级是“小时”。因此它试图到达小时的开始。您的案例更详细(忘记 2 秒,这只是内部延迟):

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

它独立于传入数据及其timestamp/event_time。

作为附加节点,较低的 window 边界 包含 而较高的 不包含 。在数学符号中,这看起来像 [start_time, end_time).