使用 Trident 拓扑查找具有最大计数的单词
Posted
技术标签:
【中文标题】使用 Trident 拓扑查找具有最大计数的单词【英文标题】:Find the word having the maximum count using a Trident topology 【发布时间】:2019-01-03 11:02:27 【问题描述】:如何使用 Trident 拓扑找到字数拓扑中计数最多的单词?这是 Trident 字数统计拓扑的链接。 https://github.com/nathanmarz/storm-starter/blob/master/src/jvm/storm/starter/trident/TridentWordCount.java
【问题讨论】:
【参考方案1】:Trident API 提供 max 和 maxBy 操作,它们在 trident 流中的一批元组的每个分区上返回最大值。
所以在计算每个单词的计数后,如下所示:
Stream wordCountsStream = topology.newStream("spout1", spout).parallelismHint(16).each(new Fields("sentence"),
new Split(), new Fields("word")).groupBy(new Fields("word")).persistentAggregate(new MemoryMapState.Factory(),
new Count(), new Fields("count")).parallelismHint(16).newValuesStream();
使用 maxBy 来获取具有最大计数的单词:
wordCountsStream.maxBy(new Fields("count"))
【讨论】:
以上是关于使用 Trident 拓扑查找具有最大计数的单词的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 Apache Storm Trident 拓扑中的错误“组件:[x] 订阅不存在的组件 [y]”