Scala 为什么流式数据集会因“失败”而失败;当流数据帧/数据集上存在流聚合时,不支持完整输出模式&引用;?
我使用Spark 2.2.0,在windows上使用Spark结构化流媒体时出现以下错误: 当Scala 为什么流式数据集会因“失败”而失败;当流数据帧/数据集上存在流聚合时,不支持完整输出模式&引用;?,scala,apache-spark,spark-structured-streaming,Scala,Apache Spark,Spark Structured Streaming,我使用Spark 2.2.0,在windows上使用Spark结构化流媒体时出现以下错误: 当流式数据帧/数据集上存在流式聚合且没有水印时,不支持完整输出模式 当流数据帧/数据集上存在不带水印的流聚合时,不支持完整输出模式 流式聚合要求您告诉Spark Structured Streaming engine何时输出聚合(按照所谓的输出模式),因为可能是聚合一部分的数据可能会延迟,并且只有在一段时间后才可用 “某个时间”部分是事件延迟,描述为从当前时间开始的水印时间 这就是为什么您必须指定水印,以
流式数据帧/数据集
上存在流式聚合
且没有水印
时,不支持完整输出模式
当流数据帧/数据集上存在不带水印的流聚合时,不支持完整输出模式
流式聚合要求您告诉Spark Structured Streaming engine何时输出聚合(按照所谓的输出模式),因为可能是聚合一部分的数据可能会延迟,并且只有在一段时间后才可用
“某个时间”部分是事件延迟,描述为从当前时间开始的水印时间
这就是为什么您必须指定水印,以允许Spark drop/忽略任何延迟事件,并停止累积可能最终导致OutOfMemoryError或类似错误的状态
话虽如此,您应该在流数据集上使用operator
withWatermark定义此数据集的事件时间水印。水印跟踪一个时间点,在此时间点之前,我们假设不会有更多的延迟数据到达
并引用
Spark将此水印用于多种用途:
- 了解何时可以完成给定的时间窗口聚合,从而在使用不允许更新的输出模式时发出聚合
- 为了最大限度地减少我们需要为正在进行的聚合保留的状态量,mapGroupsWithState和dropDuplicates操作符