我想了解spark结构化的流窗口合并功能的工作原理。
比方说,我的数据到达速度为1条记录/秒。
如果我使用groupBy("timestamp", 1 hours, 1 minutes)
,我希望每隔“ 1分钟”火花会汇总过去“ 1小时”内到达的数据。
然后,我将输出写在eventhub上,如果我使用触发处理时间(例如1分钟),则每1分钟就有一次输出。
我得到的结果是,每隔1分钟,在过去一个小时中我不会仅获得一个聚合窗口,但是过去却获得了多个窗口。
我使用的代码如下:
streamingDF\
.groupBy(
window("timestamp", "1 hours", "1 minutes") \
).agg((F.collect_set(F.col("users"))).alias("array")) \
.writeStream \
.format("eventhubs") \
.queryName("query_output") \
.options(**createEhConf(secretScope, secretEhOutputProcessing)) \
.outputMode("complete") \
.trigger(processingTime="1 minutes") \
.option("checkpointLocation", "/mnt/dbkcheckpoint/checkpoints/eventhub/output_query/v1") \
.start()
我如何每隔1分钟仅获取过去一个小时到达的数据(因此只有一个窗口)?
我尝试将滑动窗口设置为与窗口相同的长度,并且它仅向我输出一个窗口,但是我认为这不是实现我想要的正确方法。
有帮助吗?