1

考虑我有一个带有时间戳字段列的输入 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 的窗口的开始时间?

4

1 回答 1

2

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

“窗口间隔与第二/分钟/小时/天的开始对齐,对应于下一个“所用时间单位的上时间量级”。

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

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

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

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

于 2021-01-26T14:58:06.823 回答