【问题标题】:Calculating Top 10 Results in Storm计算 Storm 中的前 10 个结果
【发布时间】:2013-06-18 03:59:45
【问题描述】:

我正在从 redis 服务器读取句子并计算每个单词的出现次数。现在我想根据计数计算前 10 个单词。我有一个 Spout 可以从 Redis Server 读取句子,一个 Bolt 可以将句子分成单词,一个 Bolt 可以计算单词。

我应该如何根据计数找到 Top 10 Words?

【问题讨论】:

  • 因为 Storm 设计用于处理连续流,所以您必须确定前 10 名是什么意思。前 10 名在处理的最后一分钟,前 10 名在最后 1000 个句子中,前 10 名?

标签: redis apache-storm


【解决方案1】:

说如果你必须在最后 X 分钟做一个 top to,那么在每 X 分钟后用 tick tuple 配置你的 bolt 直到然后继续计算 bolt 中的单词。在遇到一个刻度元组发出前十个项目时,您可以将计数器保持在内存树映射中(取决于用例和数据大小)

现在说你必须在 Redis 数据结构中使用大数据保持计数前 10 名,并根据你的需要在每 Y 秒后发出前 10 名。

对于tick tuple,请参考Michael的博客@http://www.michael-noll.com/blog/2013/01/18/implementing-real-time-trending-topics-in-storm/

【讨论】:

    【解决方案2】:

    使用SortedSet 将单词的频率写入Redis。对于 Storm 处理的每个单词,它会使用 ZINCRBY 在 Redis 中增加该单词的计数器。

    SortedSet 中的值按值排序,因此您可以像这样使用ZREVRANGE 检索前十名。

    ZREVRANGE myset 0-9 WITHSCORES
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      相关资源
      最近更新 更多