首页 > 解决方案 > 有没有办法使用 Spark Structured Streaming 来计算每日聚合?

问题描述

我计划使用结构化流来计算不同指标的每日聚合。

数据量 < 每天 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")

标签: apache-sparkspark-streamingspark-structured-streaming

解决方案


运行结构化流会产生材料开销。鉴于您正在编写代码以每 24 小时生成一个结果,如果您可以花费额外的几分钟延迟来使用更少的资源,那么执行以下操作似乎会更好地利用资源。

  • 将数据提取到表中,按天分区
  • 针对该表编写一个简单的 SQL 查询以生成您的每日汇总
  • 安排作业在午夜后运行 [watermark] 秒。

这是因为您没有指定一种,所以您处于默认输出模式。如果您想坚持使用流式传输,请在代码中添加更多上下文以及您的目标是什么会有所帮助。例如,您多久需要一次结果,您是否需要在一天结束之前获得部分结果?您希望等待延迟数据更新聚合多长时间?您打算使用什么输出模式?


推荐阅读