Mongodb 映射减少按日期和类别确定范围的标记计数

Mongodb 映射减少按日期和类别确定范围的标记计数,mongodb,mapreduce,Mongodb,Mapreduce,我仍在努力把我的大脑绕在地图上。我有一组文章,每一篇都属于一个类别,每一篇文章都有一组关键字。假设文档如下所示: { author: "kris", category: "mongodb", content: "...", keywords: [ "keyword1", "keyword2", "keyword3" ], created_at: "..." } 我想从所有文档中提取关于作者的关键字计数,因此我最终得到如下结果: { author: "kris", c

我仍在努力把我的大脑绕在地图上。我有一组文章,每一篇都属于一个类别,每一篇文章都有一组关键字。假设文档如下所示:

{
  author: "kris",
  category: "mongodb",
  content: "...",
  keywords: [ "keyword1", "keyword2", "keyword3" ],
  created_at: "..."
}
我想从所有文档中提取关于作者的关键字计数,因此我最终得到如下结果:

{
  author: "kris",
  categories: {
    mongodb: { keyword1: 5, keyword2: 3, keyword3: 1 },
    ruby: { ... },
    python: { ... }
  }
}
如果您对此有任何意见,我们将不胜感激


谢谢

噢,你的问题让我多么激动啊!这实际上是我上一次分布式系统课程作业的一部分,所以在我刚毕业的时候,这对我来说是非常新鲜的

对于解析的细节,我只需要谷歌Apache的Hadoop教程,但我会给你一个总体概述

基本上,这个问题需要两个Map-Reduce阶段。在第一个映射中,您的输入应该是
键值对的列表(可能需要对文件进行lil预处理,但没有什么大不了的)。对于这些对中的每一对,您都输出
,作为要交给减速机的对(您基本上说的每一个单词都应该计算一次)

在第一次reduce过程中,将方便地压缩前面的键值对,以便每个关键字都有自己的一对
,1s表示单词在所有文档中出现的次数。因此,您只需将1相加并输出

最后一个map/reduce阶段只是根据关键字的值对其进行排序。映射:
-->Reduce:-->
。这利用了map reduce在进入reduce阶段时按键排序的事实

现在,所有关键字都按排序顺序排列在字数旁边