apache-spark - 带有 OutputMode.Complete 的 Spark 结构化流式水印
问题描述
我编写了简单的查询,它应该忽略创建的数据 < 最后一个事件时间 - 5 秒。但是这个查询不起作用。所有数据都打印出来。
我也尝试使用窗口功能window($"created", "10 seconds", "10 seconds")
,但这没有帮助。
val inputStream = new MemoryStream[(Timestamp, String)](1, spark.sqlContext)
val df = inputStream.toDS().toDF("created", "animal")
val query = df
.withWatermark("created", "5 seconds")
.groupBy($"animal")
.count()
.writeStream
.format("console")
.outputMode(OutputMode.Complete())
.start()
解决方案
您需要更多按信息分组,如下所示:
val windowedCounts = words
.withWatermark("timestamp", "10 minutes")
.groupBy(
window($"timestamp", "10 minutes", "5 minutes"),
$"word")
.count()
此外,从手册中:
输出模式必须是追加或更新。完整模式需要保留所有聚合数据,因此不能使用水印删除中间状态。
推荐阅读
- php - 如何从 laravel 导出中通过 id 创建只有 1 行的 excel 文件
- php - 输入类型 =“文本”名称未显示在打印预览中
- database - 数据库模式 - 规范化或分组
- javascript - 如何正确使用 Highcharts 中的时区选项
- vb.net - 最小化程序时保存图像出错
- python - 集成 primavera p6
- python - uWSGI 在达到生命周期时重置工作人员导致停机
- java - 使用 spark java jpply 连接后删除数据框中的公共列
- android - 是否可以将配置放在 Android 包之外,以便可以在测试和生产中使用完全相同的包?
- firebase - 如何找出我的 Firebase 应用使用的 API 密钥?