Storm 从入门到精通 第十讲 Stream Grouping - Fields Grouping
2018-04-03 09:46
435 查看
Fields Grouping按字段分组:比如按 UserId来分组,具有同样UserId来分组的Tuple会被发送到到相同的Bolts,而不同的UserId则会被分配到不同的Bolts。
![](https://img-blog.csdn.net/20180403095611595?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
应用场景:用于数据分组统计,非常类似于 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
.....
.....
.....
![](https://img-blog.csdn.net/20180403093623118?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
求和伪编码:
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用例说明:
![](https://img-blog.csdn.net/20180403093724779?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
![](https://img-blog.csdn.net/20180403093816228?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
Spout 随机发送编程语言集合如下:
![](https://img-blog.csdn.net/20180403093906861?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
运行结果:
WriterBolt平行度为4, 4个文件输出,每个文件包含的编程语言绝对无重复,同时编程语言合集无遗漏。
![](https://img-blog.csdn.net/20180403094025746?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
com.john.learn.storm.ch01.bolt.WriterBolt@23cd092c:Go、Python、Php、Clojure、VB
![](https://img-blog.csdn.net/20180403094116956?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
com.john.learn.storm.ch01.bolt.WriterBolt@40c8046a:C
![](https://img-blog.csdn.net/20180403094224171?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
com.john.learn.storm.ch01.bolt.WriterBolt@72daf38:Java、Scala、Groovy
![](https://img-blog.csdn.net/20180403094237420?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldGNvYm9s/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
com.john.learn.storm.ch01.bolt.WriterBolt@165161ce: Javascript
应用场景:用于数据分组统计,非常类似于 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
.....
.....
.....
求和伪编码:
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用例说明:
Spout 随机发送编程语言集合如下:
运行结果:
WriterBolt平行度为4, 4个文件输出,每个文件包含的编程语言绝对无重复,同时编程语言合集无遗漏。
com.john.learn.storm.ch01.bolt.WriterBolt@23cd092c:Go、Python、Php、Clojure、VB
com.john.learn.storm.ch01.bolt.WriterBolt@40c8046a:C
com.john.learn.storm.ch01.bolt.WriterBolt@72daf38:Java、Scala、Groovy
com.john.learn.storm.ch01.bolt.WriterBolt@165161ce: Javascript
相关文章推荐
- Storm 从入门到精通 第十一讲 Stream Grouping - Global Grouping
- Storm 从入门到精通 第十二讲 Stream Grouping-None Grouping、Direct Grouping 和LocalOrShuffle Grouping
- Storm 从入门到精通 第十三讲 Stream Grouping-Custom Grouping
- Storm 从入门到精通 第九讲 Stream Grouping -Shuffle Grouping
- Storm 从入门到精通 第五讲 Storm 示例 之 Storm API
- 实时计算开发-Storm从入门到精通【价值250】
- Storm 从入门到精通 第一讲 Storm 简介
- storm从入门到精通 第五节 Trident
- Storm入门到精通(一)----原理和架构
- storm入门到精通(八)--源码结构
- Storm 从入门到精通 第二讲 Storm体系结构
- Storm入门到精通(二)----Storm集群安装配置
- Storm入门到精通(三)---常用类和方法
- storm入门到精通(八)storm底层结构
- storm入门到精通(十)--框架分析
- storm从入门到精通 第七节 wordcount
- storm从入门到精通 第二节 基础知识讲解
- Storm 从入门到精通 第六讲 Storm 示例 之 第一个简单实例
- Storm 从入门到精通 第十四讲 Storm Word Count 示例讲解
- storm入门到精通(九)---搭建集群