首页 > 解决方案 > Spark Structured Streaming 基于时间戳的窗口聚合输出 - 为什么不按时间排序?

问题描述

假设我df在 Spark Structured Streaming 中有一个简单的数据框,其中包含两列:一列是时间戳字段time,另一列a是 double 类型。如果我运行查询,例如

result = df.groupBy(window('time', 10 seconds, 1 second)).agg(mean('a'))

我的输出数据帧result相对于窗口的开始时间是无序的(即,具有较晚开始时间的窗口将比具有较早开始时间的窗口出现在输出表中更早),即使我的输入流dftime. 这是为什么?当然,我可以使用附加orderBy条款强制排序:

result = df.groupBy(window('time', 10 seconds, 1 second)).agg(mean('a')).orderBy('window.start')

但我想知道为什么默认情况下,考虑到输入是有序的,在计算过程中排序会混淆?

标签: apache-sparkpysparkapache-spark-sqlspark-structured-streaming

解决方案


推荐阅读