【发布时间】:2018-04-25 19:43:04
【问题描述】:
我使用 Spark 2.2.0,但在 Windows 上使用 Spark Structured Streaming 时出现以下错误:
当
streaming DataFrames/DataSets上有streaming aggregations而没有watermark时,不支持完整输出模式。
【问题讨论】:
标签: scala apache-spark spark-structured-streaming
我使用 Spark 2.2.0,但在 Windows 上使用 Spark Structured Streaming 时出现以下错误:
当
streaming DataFrames/DataSets上有streaming aggregations而没有watermark时,不支持完整输出模式。
【问题讨论】:
标签: scala apache-spark spark-structured-streaming
当流式 DataFrames/DataSets 上存在流式聚合时,不支持完全输出模式而没有水印
流式聚合要求您告诉 Spark 结构化流引擎何时输出聚合(根据所谓的输出模式),因为可能是聚合一部分的数据可能会延迟并且仅可用一段时间后。
“某个时间”部分是事件延迟,描述为从当前时间到水印之前的时间。
这就是为什么您必须指定水印以让 Spark 丢弃/忽略任何延迟事件并停止累积最终可能导致 OutOfMemoryError 或类似情况的状态。
话虽如此,您应该在流数据集上使用 withWatermark 运算符。
withWatermark 定义此数据集的事件时间水印。水印会跟踪一个时间点,在此之前我们假设不会再有迟到的数据到达。
并引用...
Spark 将此水印用于多种用途:
- 了解何时可以完成给定的时间窗口聚合,从而在使用不允许更新的输出模式时发出。
- 为了最大限度地减少我们需要为正在进行的聚合保留的状态量,mapGroupsWithState 和 dropDuplicates 运算符。
当前水印是通过查看查询中所有分区的 MAX(eventTime) 减去用户指定的延迟阈值来计算的。由于跨分区协调此值的成本,实际使用的水印只能保证至少比实际事件时间晚的延迟阈值。在某些情况下,我们可能仍会处理延迟时间超过 delayThreshold 的记录。
查看 Spark Structured Streaming 的 Handling Late Data and Watermarking。
【讨论】: