【问题标题】:Why does streaming Dataset fail with "Complete output mode not supported when there are streaming aggregations on streaming DataFrames/DataSets... "?为什么流数据集失败并显示“当流数据帧/数据集上存在流聚合时不支持完整输出模式......”?
【发布时间】: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


    【解决方案1】:

    当流式 DataFrames/DataSets 上存在流式聚合时,不支持完全输出模式而没有水印

    流式聚合要求您告诉 Spark 结构化流引擎何时输出聚合(根据所谓的输出模式),因为可能是聚合一部分的数据可能会延迟并且仅可用一段时间后。

    “某个时间”部分是事件延迟,描述为从当前时间到水印之前的时间。

    这就是为什么您必须指定水印以让 Spark 丢弃/忽略任何延迟事件并停止累积最终可能导致 OutOfMemoryError 或类似情况的状态。

    话虽如此,您应该在流数据集上使用 withWatermark 运算符。

    withWatermark 定义此数据集的事件时间水印。水印会跟踪一个时间点,在此之前我们假设不会再有迟到的数据到达。

    并引用...

    Spark 将此水印用于多种用途:

    • 了解何时可以完成给定的时间窗口聚合,从而在使用不允许更新的输出模式时发出。
    • 为了最大限度地减少我们需要为正在进行的聚合保留的状态量,mapGroupsWithState 和 dropDuplicates 运算符。

    当前水印是通过查看查询中所有分区的 MAX(eventTime) 减去用户指定的延迟阈值来计算的。由于跨分区协调此值的成本,实际使用的水印只能保证至少比实际事件时间晚的延迟阈值。在某些情况下,我们可能仍会处理延迟时间超过 delayThreshold 的记录。

    查看 Spark Structured Streaming 的 Handling Late Data and Watermarking

    【讨论】:

      猜你喜欢
      • 2021-11-29
      • 2017-12-18
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      • 2020-06-02
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多