滑动窗口在Spark Structured Streaming中如何工作?

时间:2019-12-20 11:28:25

标签: apache-spark pyspark spark-streaming spark-structured-streaming

我想了解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分钟仅获取过去一个小时到达的数据(因此只有一个窗口)?

我尝试将滑动窗口设置为与窗口相同的长度,并且它仅向我输出一个窗口,但是我认为这不是实现我想要的正确方法。

有帮助吗?

0 个答案:

没有答案