Language agnostic 我如何从数以十亿计的推特流中找到前10个标签

Language agnostic 我如何从数以十亿计的推特流中找到前10个标签,language-agnostic,twitter,Language Agnostic,Twitter,这是一个面试问题,有人问我,我没有一个很好的答案。我想知道是否有人可以帮助我理解解决这个问题的方法: “你将收到数十亿条推特。你将如何找出前10个标签?” 谢谢您可能无法分析所有推文,所以您只需分析一个随机样本。从该样本中找出前10名,您就可以找到前10名(在一定程度上,取决于样本大小和样本质量) 我不认为他们在寻找一个实际的解决方案,而是更多地探索你的思维过程,如何解决一个(实际上)不可能解决的问题。创建一个地图,以标签作为键,以计数器作为值 增加您收到的每条推文中每个标签的计数器 检查计数器

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

“你将收到数十亿条推特。你将如何找出前10个标签?”


谢谢

您可能无法分析所有推文,所以您只需分析一个随机样本。从该样本中找出前10名,您就可以找到前10名(在一定程度上,取决于样本大小和样本质量)


我不认为他们在寻找一个实际的解决方案,而是更多地探索你的思维过程,如何解决一个(实际上)不可能解决的问题。

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

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

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

你对这个问题的措辞没有任何限制,这将阻止这个简单的解决方案。在面试的情况下,我会问一些澄清的问题来引出这些限制

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


我不确定对于所提出的问题是否有一个恒定的内存解决方案,但我知道一个相关(通常更有用)问题的解决方案:识别构成结果给定部分的元素。我给的


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

@Ericportoleje您能详细说明一下吗?@Ericportoleje统计抽样无法找到
前10名
。它将发现10个很有可能位于前10位的hashtag,将两个流行词串在一起,并将MapReduce放在其中。。。“如果他期望10亿条推特的“流”意味着全世界推特使用3天,他可能无论如何都不会知道真正的答案。”阿尔法辛同意,并在我的回答中详细阐述了一点。如果你假设你可以分析所有的推文,那么问题很容易解决,但我认为他们希望你意识到你不能真正做到这一点,并提出一个切实可行的替代方案。@EricPetroelje我也同意你的观点,这个问题的提出方式是不现实的。这正是为什么回答面试问题的一个重要部分是自己提问,以确保你没有做出任何(错误的)假设。对于任何求职者,我建议阅读:为什么你不能分析所有的推特?就像。。。140Gb的材料,最大。这不是很多…@corsiKa-你可以,但问题没有具体说明推特的速度。一分钟10亿?一个小时?一天?如果他们只是想知道你是否能够使用带有计数器的地图数据结构,那么就没有必要让它成为10亿条推特流——1000条推特就可以了。10亿条推特流进来,你不认为如果我们使用地图,会有内存问题吗?此外,面试官通过不指定约束条件来保持开放性。我可以想象,有了这个答案,他会把内存作为一个约束,那么我该怎么办呢?有一个警告,根据hashtag的数量,您可能需要将映射卸载到数据库表或类似的地方,这是一个完美的答案。尤其是当你考虑约束方面时,这可能是面试官正在寻找的。“BealyDistter不要让我以前的评论愚弄你——你不太可能把地图卸载到DB。考虑到我们可以将散列存储在任意长度的字节中,并且大多数标记都会重复多次,如果你想一想,这只不过是8-10GB的内存,如果需要的话,你可以轻松地将其分配到多个服务器上。@corsiKa这听起来太简单了:)我想到了一个后续想法。假设hashmap具有一定容量后,我们将其卸载到数据库中。让我们想象一下,我们得到了大约一百万个独特的hashtag。从这个数据库中查找前10个hashtag将是一个非常耗时的查询。你有什么建议?@brainydexter好吧,要么在标签上保留一个索引(这不会太糟糕),要么不索引,只排序。从这个链接可以看出,我在几分钟内编写了一个小Java,一个资源特别有限的服务器能够在不到一秒钟的时间内对500万条记录进行排序。我只能想象数据库服务器的性能会更好。链接: