带outputmode.complete的spark结构化流式水印

abithluo  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(680)

我编写了一个简单的查询,它应该忽略创建的数据<上次事件时间-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()
vmjh9lq9

vmjh9lq91#

您需要按以下信息进行更多分组:

val windowedCounts = words
    .withWatermark("timestamp", "10 minutes")
    .groupBy(
        window($"timestamp", "10 minutes", "5 minutes"),
        $"word")
    .count()

此外,根据手册:
输出模式必须是追加或更新。完整模式要求保留所有聚合数据,因此不能使用水印删除中间状态。

相关问题