Window Spark Structured Streaming 中的操作

Window operation in Spark Structured Streaming

我没看懂window进程中的状态。例如;

val sums = levels.
  groupBy(window($"time", "5 seconds")).
  agg(sum("level")).show()
  1. 根据上面的代码,Spark是否只保留最后5秒的状态?
  2. 是否在每次 windowing 操作中删除旧状态?
  3. windowing 州在哪里举行?记忆?

而且,有了水印,是否在每个分组操作中删除了旧状态?

  1. According to the code above, does Spark only keep states in the last 5 seconds?

这取决于您使用的语义:如果您使用处理时间,是的。如果您使用事件时间,当水印经过其结束时间戳时,状态中的 windows 将被驱逐,因此如果您允许事件延迟 7 天,状态中的 windows 将在 7 天后驱逐。

  1. Are old states being deleted in each windowing operation?

每个批次都会发生逐出(删除状态中的 windows)。

  1. Where do the windowing states held? Memory?

对于 Apache Spark,执行器中的哈希图包含 Key/Value 对状态。事实上,Spark 持有多个版本(批次)的状态,因此您可能需要考虑占用更大的内存。在最坏的情况下,理论上它可以比状态版本占用 100 倍的内存。 (这将在 Spark 2.4.0 中修复。)

Databricks 表示他们的产品利用了 RocksDB,这避免了将它们全部保存在堆内存中。

And, with watermarking, are old states being deleted in each grouping operation?

驱逐发生在有状态操作上,与语义无关:处理时间与事件时间。

希望这对您有所帮助。