有没有办法使用 Spark Structured Streaming 来计算每日聚合?
Is there a way to use Spark Structured Streaming to calculate daily aggregates?
我计划使用结构化流来计算不同指标的每日汇总。
每天数据量 < 1000 条记录。
这里是输入数据的简单例子
timestamp, Amount
1/1/20 10:00, 100
1/1/20 11:00, 200
1/1/20 23:00, 400
1/2/20 10:00, 100
1/2/20 11:00, 200
1/2/20 23:00, 400
1/2/20 23:10, 400
预期输出
Day, Amount
1/1/20, 700
1/2/20, 1100
我打算在结构化流式传输中做类似的事情,不确定它是否有效或者是否是正确的方法?
parsedDF.withWatermark("date", "25 hours").groupBy("date", window("date", "24 hours")).sum("amount")
运行 宁结构化流有 material 开销。如果您正在编写代码以每 24 小时生成一个结果,那么如果您可以多花几分钟的延迟时间来换取使用更少的资源,那么似乎可以更好地利用资源来执行以下操作。
- 将数据提取到 table,按天分区
- 针对此 table 编写一个简单的 SQL 查询以生成您的每日汇总数据
- 将作业安排在午夜后 运行 [watermark] 秒。
这给人的印象是您处于默认输出模式,因为您没有指定。如果您想坚持流式传输,代码中的更多上下文以及您的目标是什么会有所帮助。例如,您多久需要一次结果,是否需要在一天结束前获得部分结果?您希望等待多长时间来等待延迟数据更新聚合?您打算使用哪种输出模式?
我计划使用结构化流来计算不同指标的每日汇总。
每天数据量 < 1000 条记录。
这里是输入数据的简单例子
timestamp, Amount
1/1/20 10:00, 100
1/1/20 11:00, 200
1/1/20 23:00, 400
1/2/20 10:00, 100
1/2/20 11:00, 200
1/2/20 23:00, 400
1/2/20 23:10, 400
预期输出
Day, Amount
1/1/20, 700
1/2/20, 1100
我打算在结构化流式传输中做类似的事情,不确定它是否有效或者是否是正确的方法?
parsedDF.withWatermark("date", "25 hours").groupBy("date", window("date", "24 hours")).sum("amount")
运行 宁结构化流有 material 开销。如果您正在编写代码以每 24 小时生成一个结果,那么如果您可以多花几分钟的延迟时间来换取使用更少的资源,那么似乎可以更好地利用资源来执行以下操作。
- 将数据提取到 table,按天分区
- 针对此 table 编写一个简单的 SQL 查询以生成您的每日汇总数据
- 将作业安排在午夜后 运行 [watermark] 秒。
这给人的印象是您处于默认输出模式,因为您没有指定。如果您想坚持流式传输,代码中的更多上下文以及您的目标是什么会有所帮助。例如,您多久需要一次结果,是否需要在一天结束前获得部分结果?您希望等待多长时间来等待延迟数据更新聚合?您打算使用哪种输出模式?