在这种情况下,我有很多日志。每个日志包含时间、ip、url、内容等。
问题1:我想做的是确定给你一个特定的单词,比如"谷歌",告诉我哪个日志的内容包含这个词。
问题2:我不能确定我更喜欢哪个词,所以给我整个倒排索引的答案。
所以,我的问题是:对于问题1,如何设计映射器&减速器?
- 我可以使用mapper来分割日志的内容,mapper的输出是大量的k-v对
<'word', log_id>
。reducer应该遍历所有这些答案,如果遇到像<'google', log_id>
这样的对,则输出它 - 我也可以使用mapper来处理整个内容,如果它遇到单词"谷歌",它会给出
<'google', log_id>
的输出,如果它碰到其他单词,就跳过。如果映射器不符合特定的单词,则不输出任何内容。在这种情况下,减速器只是输出,不需要工作通过
你能告诉我哪一个更好吗?
这两者做的事情不同。您的第二个实现适用于问题1,当您有一个确切的单词时。当您不知道要查找的单词时,您的第一个实现适用于问题2。这些是不同的问题,有不同的解决方案。
如果你只是想解决问题1,那么你的第二个算法会工作得很好,工作得更快。