【发布时间】: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