Spark 结构化流在附加模式下显示结果为时已晚

Posted

技术标签:

【中文标题】Spark 结构化流在附加模式下显示结果为时已晚【英文标题】:Spark structured streaming shows results too late when in append mode 【发布时间】:2018-10-23 08:35:12 【问题描述】:

在https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#handling-late-data-and-watermarking 的文档中,使用 10 分钟的窗口、10 分钟的水印和 5 分钟的触发器显示了一个示例。

在使用 APPEND 模式的图表中,12:00:00->12:10:00 窗口的第一个结果仅在 12:25:00 显示。原因是当时水印是在12:11:00,所以12:11:00之前的所有窗口已经可以发送到sink了。

但是,在 12:20:00,我们已经知道水印是 12:11:00。那么为什么不是在 12:20:00 而不是在 12:25:00 发送第一个窗口呢?

【问题讨论】:

【参考方案1】:

因为 Spark 为每个分区应用全局水印而不是水印:下一批的水印是在当前批次中的任务“完成”时决定的。每个分区都不知道决定水印:它只知道其分区中的事件。

所以在 12:20:00,Spark 获取 12:21:00 并处理它,在批处理结束时,Spark 收集事件的时间戳并确定最大时间戳,并决定下一批的水印 - “12 :11:00" - 这将是批次 12:25:00 的水印。

【讨论】:

以上是关于Spark 结构化流在附加模式下显示结果为时已晚的主要内容,如果未能解决你的问题,请参考以下文章

从多个 Kafka 主题读取的 Spark 结构化流式应用程序

Spark结构化流式kafka在没有模式的情况下转换JSON(推断模式)

在Delphi中,使用TreeView创建结构树,何种方法最好?

如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式

并行流在不同的操作下可以正常工作吗?

Spark on Yarn 流程