我正在从 redis 服务器读取句子并计算每个单词的出现次数。现在我想根据计数计算前 10 个单词。我有一个 Spout 可以从 Redis Server 读取句子,一个 Bolt 可以将句子分解成单词,一个 Bolt 可以计算单词。
根据计数找到前 10 个单词的方法应该是什么?
我正在从 redis 服务器读取句子并计算每个单词的出现次数。现在我想根据计数计算前 10 个单词。我有一个 Spout 可以从 Redis Server 读取句子,一个 Bolt 可以将句子分解成单词,一个 Bolt 可以计算单词。
根据计数找到前 10 个单词的方法应该是什么?
假设如果你必须在最后 X 分钟做一次顶到,那么在每 X 分钟后用刻度元组配置你的 Bolt,直到然后继续计算 Bolt 中的单词。在遇到一个刻度元组发出前十个项目时,您可以将计数器保持在内存树映射中(取决于用例和数据大小)
现在假设您必须在 Redis 数据结构中使用大数据量维护计数的前 10 名,并根据您的需要在每 Y 秒后发出前 10 名。
对于刻度元组,请参阅 Michael 的博客 @ http://www.michael-noll.com/blog/2013/01/18/implementing-real-time-trending-topics-in-storm/
使用SortedSet将单词的频率写入 Redis 。对于 Storm 处理的每个单词,它使用ZINCRBY在 Redis 中增加该单词的计数器。
SortedSet 中的值是按值排序的,因此您可以像这样使用ZREVRANGE检索前十名。
ZREVRANGE myset 0-9 WITHSCORES