Fields Grouping按字段分组:比如按 UserId来分组,具有同样UserId来分组的Tuple会被发送到到相同的Bolts,而不同的UserId则会被分配到不同的Bolts。

应用场景:用于数据分组统计,非常类似于 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
.....
.....

应用场景:用于数据分组统计,非常类似于 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