Карта Уменьшить количество тегов, ограниченных датой и категорией - PullRequest
2 голосов
/ 30 июня 2011

Я все еще пытаюсь обернуть свой мозг вокруг уменьшения карты.У меня есть коллекция статей, каждая из которых относится к одной категории, и у каждой статьи есть набор ключевых слов.Предполагая, что документ выглядит так:

{
  author: "kris",
  category: "mongodb",
  content: "...",
  keywords: [ "keyword1", "keyword2", "keyword3" ],
  created_at: "..."
}

Я хочу, по сути, извлечь из всех документов количество ключевых слов по отношению к автору, поэтому я получаю что-то вроде:

{
  author: "kris",
  categories: {
    mongodb: { keyword1: 5, keyword2: 3, keyword3: 1 },
    ruby: { ... },
    python: { ... }
  }
}

Любая информация по этому вопросу будет принята с благодарностью.

Спасибо!

1 Ответ

2 голосов
/ 30 июня 2011

О, как я взволнован вашим вопросом!На самом деле это было частью моего последнего задания для моего класса распределенных систем, так что это довольно свежо в моем недавнем образовании.

Для деталей разбора я бы просто заглянул в учебник Apache по Hadoop, но я дамВы общий обзор.

В принципе, эта проблема требует двух этапов Map-Reduce.На первой карте ваш ввод должен представлять собой список <filename, {list of keywords}> пар ключ-значение (может потребоваться предварительная обработка файлов, но не важная персона).Для каждой из этих пар вы выводите <keyword, 1> в качестве пары, которая должна быть передана редуктору (по сути, вы говорите, что каждое слово должно учитываться один раз).

В первом проходе сокращения предыдущие пары ключ-значениебудет удобно сжато, так что у каждого ключевого слова будет своя собственная пара вида <keyword, {1,1,1,1,1,1}>, где число 1 представляет число раз, когда слово встречается во всех документах.Таким образом, вы просто суммируете 1 с и выводите <keyword, sum>.

Последняя фаза сопоставления / сокращения состоит в том, чтобы просто отсортировать ключевые слова по их значению.Карта: <keyword,sum> --> <sum,keyword> Reduce: <sum, {keywords}> --> <keyword,sum>.Это использует тот факт, что map-Reduce сортирует по ключу при переходе к фазе Reduce.

Теперь все ключевые слова находятся рядом с их количеством слов в отсортированном порядке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...