Skip to content

Commit 0c0fcd4

Browse files
committed
增加 Update 解析
1 parent d857303 commit 0c0fcd4

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed
Loading

Structured Streaming 源码解析系列/4.1 Structured Streaming 之 Event Time 解析.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ val windowedCounts = words.groupBy(
3838

3939
- 我们有一系列 arriving 的 records
4040
- 首先是一个对着时间列 `timestamp` 做长度为`10m`,滑动为`5m`*window()* 操作
41-
- 例如下图右上角的虚框部分,当达到一条记录 `12:11|dog` 时,会将 `12:11` 归入两个窗口 `12:05-12:15``12:10-12:20`,所以产生两条记录:`12:05-12:15|dog``12:10-12:20|dog`,对于记录 `12:13|owl` 同理产生两条记录:`12:05-12:15|owl``12:10-12:20|owl`
41+
- 例如上图右上角的虚框部分,当达到一条记录 `12:22|dog` 时,会将 `12:22` 归入两个窗口 `12:15-12:25``12:20-12:30`,所以产生两条记录:`12:15-12:25|dog``12:20-12:30|dog`,对于记录 `12:24|dog owl` 同理产生两条记录:`12:15-12:25|dog owl``12:20-12:30|dog owl`
4242
- 所以这里 *window()* 操作的本质是 *explode()*,可由一条数据产生多条数据
4343
- 然后对 *window()* 操作的结果,以 `window` 列和 `word` 列为 key,做 *groupBy().count()* 操作
4444
- 这个操作的聚合过程是增量的(借助 StateStore)
@@ -78,11 +78,19 @@ Append 的语义将保证,一旦输出了某条 key,未来就不会再输出
7878

7979
#### (c) Update
8080

81-
//TODO: Update this section as soon as `update` mode is officially released
81+
> 小节注:本节 Update 模式的相关内容适用于 ≥ Spark 2.1.1 版本 —— 官方已开发完成,但尚未正式发布
82+
83+
<p align="center"><img src="4.imgs/230.png"></p>
84+
85+
如上图所示,在 Update 模式中,只有本执行批次 State 中被更新了的条目会被输出:
86+
87+
- 在 12:10 这个执行批次,State 中全部 2 条都是新增的(因而也都是被更新了的),所以输出全部 2 条;
88+
- 在 12:20 这个执行批次,State 中 2 条是被更新了的、 4 条都是新增的(因而也都是被更新了的),所以输出全部 6 条;
89+
- 在 12:30 这个执行批次,State 中 4 条是被更新了的,所以输出 4 条。这些需要特别注意的一点是,如 Append 模式一样,本执行批次中由于(通过 watermark 机制)确认 `12:00-12:10` 这个 window 不会再被更新,因而将其从 State 中去除,但没有因此产生输出。
8290

8391
## 总结
8492

85-
本文解析了 Structured Streaming 原生提供的对 event time 的支持,包括 window()、groupBy() 增量聚合、对 late date 的支持、以及在 Complete, Append 模式下的输出结果。
93+
本文解析了 Structured Streaming 原生提供的对 event time 的支持,包括 window()、groupBy() 增量聚合、对 late date 的支持、以及在 Complete, Append, Update 模式下的输出结果。
8694

8795
## 扩展阅读
8896

Loading
Loading

0 commit comments

Comments
 (0)