Fields Grouping按字段分组:比如按 UserId来分组,具有同样UserId来分组的Tuple会被发送到到相同的Bolts,而不同的UserId则会被分配到不同的Bolts。
Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping
应用场景:用于数据分组统计,非常类似于 SQL Group By 关键字, 主要用于分组求和、统计、Avg、Min、Max等等。

例如: 求一个学生的总分(Storm 实现)?
Student:  ID Name  Course Score   -> SQL   select ID, name, sum(score) from Student group by id, name
001 小胡 语文 90
002 小王 语文 95
001 小胡 英语 88
002 小王 英语 90
001 小胡 数学  90
002 小王 数学  95
.....
.....

.....

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping



求和伪编码:
Map containsKey(ID+Name) not found
Map.put(ID+Name, Score)
If Found then
Get scoreSum = Map.get(ID+ Name)

Map.put(ID+Name, Score+scoreSum)


PrintWriterToplogyOnFieldGroupConfig用例说明:


Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

Spout 随机发送编程语言集合如下:

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

运行结果:

WriterBolt平行度为4, 4个文件输出,每个文件包含的编程语言绝对无重复,同时编程语言合集无遗漏。

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

[email protected]:Go、Python、Php、Clojure、VB

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

[email protected]C

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

[email protected]Java、Scala、Groovy

Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

[email protected]: JavascriptStorm 从入门到精通 第十讲 Stream Grouping - Fields Grouping

相关文章: