【问题标题】:how can i find top 10 hashtags from stream of billion tweets我如何从数十亿条推文中找到前 10 个主题标签
【发布时间】:2012-07-05 18:46:27
【问题描述】:

这是有人问我的一个面试问题,我并没有很好的答案。我想知道是否有人可以帮助我理解这个问题的解决方案:

“你有十亿条推文流入。你将如何找出前 10 个主题标签?”

谢谢

【问题讨论】:

  • @EricPetroelje 你能详细说明一下吗?
  • @EricPetroelje 统计抽样找不到top 10。它将找到 10 个很有可能进入前 10 名的主题标签
  • 将几个流行词串在一起,然后将 MapReduce 放入其中……如果他预计 10 亿条推文的“流”意味着全球 3 天的推特使用量,他可能不会知道真正的还是回答吧。
  • @alfasin - 同意,并在我的回答中详细说明。如果您假设您实际上可以分析所有推文,那么这个问题很容易解决,但我认为他们希望您会意识到您无法真正做到这一点并想出一个实用的替代方案。
  • @EricPetroelje 我也同意你的观点,这个问题的提出方式是不现实的。这就是为什么回答面试问题的一个重要部分是自己提问,以确保你没有做出任何(错误的)假设。对于任何求职者,我建议阅读:crackingthecodinginterview.com

标签: language-agnostic twitter


【解决方案1】:

创建一个地图,其中一个标签作为键,一个计数器作为值。

增加您收到的每条推文中每个标签的计数器。

检查计数器的值以找到前 10 个。

您对问题的措辞不包括任何会禁止这种简单解决方案的限制条件。在面试的情况下,我会提出明确的问题来引出这些限制。

在“它必须以线性时间运行”和“它必须使用恒定的内存量”等约束条件下,出现了更多有趣的答案。


我不确定是否有针对所提出问题的恒定记忆解决方案,但我知道一个用于相关(通常更有用)的问题:识别构成给定结果部分的元素。我给了as an answer to a similar question.

(我说“更有用”,因为如果给定项目的总比例低于阈值,则它比真正的“前 10”材料更有可能是噪音。)

【讨论】:

  • 有十亿条推文流入,你不认为如果我们使用地图会有内存问题吗?此外,面试官通过不指定限制来保持开放。我想有了这个答案,他会让记忆成为一种约束,那我该怎么办?
  • 需要注意的是,根据标签的数量,您可能需要将地图卸载到数据库表或类似的东西,这是完美的答案。尤其是当您考虑约束方面时,这可能是面试官正在寻找的。​​span>
  • @brainydexter 不要让我之前的评论欺骗您 - 您不太可能需要将地图卸载到数据库。鉴于我们可以将哈希存储在与标签长度一样多的字节中,并且大多数标签将重复多次,如果您考虑一下,那可能只有 8-10 GB 的内存,您可以轻松地将其分配到一个数字上如果需要,服务器数量。
  • @corsiKa 这听起来太简单了 :) 我想到了一个后续想法。假设在哈希图达到一定容量后,我们将其卸载到数据库。让我们想象一下,我们得到了大约一百万个独特的主题标签。要从该数据库中查找前 10 个主题标签将是一个非常耗时的查询。你有什么建议?
  • @brainydexter 好吧,它可以在标签上保留一个索引(这不会太糟糕),或者让它不被索引并且只排序。从这个链接可以看出,我在几分钟内编写的一个小 Java,一个资源特别有限的服务器能够在一秒钟内对 500 万条记录进行排序。我只能想象数据库服务器的性能会好得多。链接:ideone.com/Avid7
【解决方案2】:

您可能无法分析所有推文,因此您只需分析随机样本。从该样本中找到前 10 名,您就可以找到前 10 名(在某种程度上可以确定,具体取决于样本量和样本质量)。

我不认为他们在这里寻找实际的解决方案,而是更多地探索您的思考过程,以了解如何解决(实际上)不可能的问题。

【讨论】:

  • 你为什么不能分析所有的推文?就像... 140Gb 的材料,最大。这不是很多......
  • @corsiKa - 你可以,但问题没有具体说明推文进入的速度。每分钟十亿?一小时?一天?如果他们只是想知道您是否能够使用带有计数器的 Map 数据结构,那么没有必要将其设为包含 10 亿条推文的流 - 1000 条推文就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2010-10-31
  • 2012-12-23
  • 2017-01-17
  • 2018-07-31
相关资源
最近更新 更多