apache-spark - 有没有办法使用 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")
解决方案
运行结构化流会产生材料开销。鉴于您正在编写代码以每 24 小时生成一个结果,如果您可以花费额外的几分钟延迟来使用更少的资源,那么执行以下操作似乎会更好地利用资源。
- 将数据提取到表中,按天分区
- 针对该表编写一个简单的 SQL 查询以生成您的每日汇总
- 安排作业在午夜后运行 [watermark] 秒。
这是因为您没有指定一种,所以您处于默认输出模式。如果您想坚持使用流式传输,请在代码中添加更多上下文以及您的目标是什么会有所帮助。例如,您多久需要一次结果,您是否需要在一天结束之前获得部分结果?您希望等待延迟数据更新聚合多长时间?您打算使用什么输出模式?
推荐阅读
- flutter - 因为来自 sdk 的每个版本的 flutter_test 都依赖于路径 1.8.0-nullsafety.1
- shell - 将 "\r\027[1A\027[K" 写入标准输出有什么作用?
- javascript - 在 Angular 中获得嵌入式 iFrame 的性能
- python - Pandas read_sql_query 的参数错误
- vue.js - 卡在 400 bad request 上,方法可能不正确?
- database - 在 $group 之后不能 $unwind 文档
- python - Python新手,不理解下面代码的结果
- jinja2 - Jinja2中的一行for循环
- sql - 在 Oracle SQL 查询中对 UP 行求和
- java - 在最终版本中找不到外部库