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 снова через массив элементов. Это звучит как неоптимальное решение, поэтому любая помощь приветствуется.