MapReduce: получить размер и l oop через Iterable - PullRequest
0 голосов
/ 02 апреля 2020

MapReduce in Had oop.

У меня есть Mapper, который дает мне следующий вывод:

  • Текст (категория)
  • Текст (A предложение)

Примером вывода будет («Программирование», «JavaScript - мем!»).

Редуктор, который должен подсчитывать количество документов по категории, был настроен со следующим вводом и выводом:

  • Текст
  • Текст
  • Text
  • IntWritable

Код для Редуктора в основном:

public class CategoriesCountReducer extends Reducer <Text, Text, Text, IntWritable> {
    public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {

        // Variable which will contain the number of documents of the given category
        IntWritable docsCategory = new IntWritable(Iterables.size(itrValue));

        for (Text value: values) {
            // add key and value to one new key
            context.write(key, docsCategory);
        }
    }
}

Это, очевидно, не работает, так как я пытаюсь использовать Iterable дважды (один раз, чтобы получить длину, и один для go через каждый документ).

Моя текущая мысль - go один раз через Iterable и создать массив со всеми элементами. А затем go снова через массив элементов. Это звучит как неоптимальное решение, поэтому любая помощь приветствуется.

...