如何设计一个特殊的MapReduce倒排索引?
How to design a special MapReduce inverted index?
在这种情况下,我有很多日志。
每条日志包含时间、ip、url、内容等
问题一:
我想做的是确定给你一个某个词,比如'google',告诉我哪个日志的内容包含这个词。
问题二:
我不确定我喜欢哪个词,所以请给我整个倒排索引答案。
所以,我的问题是:
对于问题1,mapper&reducer如何设计?
- 我可以用mapper来拆分log的内容,mapper的输出是很多k-v对
<'word', log_id>
。 reducer 应该遍历所有这些答案,如果它遇到一对像 <'google', log_id>
,输出它。
- 而且我也可以用mapper来遍历整个内容,如果遇到'google'这个词,就输出
<'google', log_id>
,如果遇到其他词,直接跳过。如果mapper不满足特定的词,它输出nothing.In这种情况,reducer只是输出,不需要工作。
那你能告诉我哪个更好吗?
这两个做不同的事情。你的第二个实现适用于问题 1,当你有一个你正在寻找的确切词时。当您不知道要查找的单词时,您的第一个实现适用于问题 2。这些是有不同解决方案的不同问题。
如果您只是想解决问题 1,那么您的第二个算法会工作得很好并且工作得更快。
在这种情况下,我有很多日志。 每条日志包含时间、ip、url、内容等
问题一: 我想做的是确定给你一个某个词,比如'google',告诉我哪个日志的内容包含这个词。
问题二: 我不确定我喜欢哪个词,所以请给我整个倒排索引答案。
所以,我的问题是: 对于问题1,mapper&reducer如何设计?
- 我可以用mapper来拆分log的内容,mapper的输出是很多k-v对
<'word', log_id>
。 reducer 应该遍历所有这些答案,如果它遇到一对像<'google', log_id>
,输出它。 - 而且我也可以用mapper来遍历整个内容,如果遇到'google'这个词,就输出
<'google', log_id>
,如果遇到其他词,直接跳过。如果mapper不满足特定的词,它输出nothing.In这种情况,reducer只是输出,不需要工作。
那你能告诉我哪个更好吗?
这两个做不同的事情。你的第二个实现适用于问题 1,当你有一个你正在寻找的确切词时。当您不知道要查找的单词时,您的第一个实现适用于问题 2。这些是有不同解决方案的不同问题。
如果您只是想解决问题 1,那么您的第二个算法会工作得很好并且工作得更快。