【问题标题】:Why Spark Structured Streaming window aggregation evaluates after each trigger为什么 Spark Structured Streaming 窗口聚合在每次触发后进行评估
【发布时间】:2018-08-15 14:02:21
【问题描述】:

使用 Spark 2.2.0,我正在从 Kafka 读取具有 2 列“textcol”和“time”的数据。 “时间”列有最新的处理时间。我想在 20 秒的固定窗口持续时间中计算“textcol”的唯一值。我的触发持续时间是 10 秒。

例如,如果在 20 秒的窗口持续时间中,trigger1 的 textcol=a,trigger2 的 textcol=b,那么我希望在 20 秒后有如下输出

textcol    cnt
a          1
b          1

我在数据集 ds 中使用了下面的代码

ds.groupBy(functions.col("textcol"), 
                functions.window(functions.col("time"), "20 seconds"))
        .agg(functions.count("textcol").as("cnt"))
        .writeStream().trigger(Trigger.ProcessingTime("10 seconds"))
        .outputMode("update")
        .format("console").start();

但由于 20 秒后有 2 个触发器,我得到了两次输出

触发器1:

textcol    cnt
a          1

触发器2:

textcol    cnt
b          1

那么为什么window在20秒后不聚合结果和输出,而不是每次10-10秒触发一次呢?

有没有其他方法可以在 Spark 结构化流中实现它?

【问题讨论】:

    标签: spark-structured-streaming


    【解决方案1】:

    将您的 .outputMode("update") 更改为 .outputMode("complete")

    【讨论】:

      猜你喜欢
      • 2017-04-22
      • 2018-08-08
      • 2019-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      相关资源
      最近更新 更多