Apache spark Spark结构化流媒体中的窗口操作

Apache spark Spark结构化流媒体中的窗口操作,apache-spark,spark-structured-streaming,Apache Spark,Spark Structured Streaming,我不理解窗口进程中的状态。比如, val总和=水平。 groupBywindow$时间,5秒。 aggsumlevel.show 根据上面的代码,Spark是否只在最后5秒内保持状态? 是否在每次窗口操作中删除旧状态? 窗口状态在哪里?记忆力 并且,使用水印时,是否在每个分组操作中删除旧状态 根据上面的代码,Spark是否只在最后5秒内保持状态? 这取决于您使用的语义:如果您使用的是处理时间,则是。如果您使用的是事件时间,则当水印经过其结束时间戳时,处于状态的窗口将被逐出,因此,如果您允许延迟7

我不理解窗口进程中的状态。比如,

val总和=水平。 groupBywindow$时间,5秒。 aggsumlevel.show 根据上面的代码,Spark是否只在最后5秒内保持状态? 是否在每次窗口操作中删除旧状态? 窗口状态在哪里?记忆力 并且,使用水印时,是否在每个分组操作中删除旧状态

根据上面的代码,Spark是否只在最后5秒内保持状态? 这取决于您使用的语义:如果您使用的是处理时间,则是。如果您使用的是事件时间,则当水印经过其结束时间戳时,处于状态的窗口将被逐出,因此,如果您允许延迟7天的事件,处于状态的窗口将在7天后逐出

是否在每次窗口操作中删除旧状态? 将对每个批处理执行处于状态的窗口的逐出删除

窗口状态在哪里?记忆力 对于ApacheSpark,executor中的hashmap保存状态的键/值对。事实上,SCAP持有多个版本的批处理状态,所以您可能需要考虑占用内存的更大的大小。在最坏的情况下,从理论上讲,它可以占用比状态版本多100倍的内存。这将在Spark 2.4.0中进行修正

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

并且,使用水印时,是否在每个分组操作中删除旧状态

逐出发生在有状态操作上,而不考虑语义:处理时间与事件时间


希望这能有所帮助。

非常感谢。在许多情况下,是否有根据事件时间使用水印进行的操作?我不确定是否正确理解,但使用带有时间戳列的“withWatermark”,然后在group by中使用带有时间戳列的窗口函数。就这些,太好了!很乐意帮忙。