Я пишу mapreduce с Hadoop. В методе уменьшения, я хочу использовать context.write(). Но вывод - это тип int. Как я могу это сделать? Когда я использую context.write(), он показывает ошибку:как написать значения int в редукторе хауопа
Второй аргумент не может быть int.
Это мой код:
public void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
int count = 0;
for (NullWritable nullWritable : values) {
count++;
}
//context.write(key, count);
}
Это позволяет сократить отсчитывает что-то. Затем он должен написать переменную ключа и счетчика.
Как я могу это сделать?
Ответ
Я нашел мой ответ. Я должен новый a IntWritable класс и использовать его метод (set (intValue)).
Как следующий код:
IntWritable c = new IntWritable();
public void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
int count = 0;
for (NullWritable nullWritable : values) {
count++;
}
c.set(count);
context.write(key, c);
}
Спасибо. Но он отнимает память! Если ваш вызов вызвал много раз, он создавал новый объект и тратил память ... однако спасибо;) – Amir
Ваш редуктор будет называться столько раз, сколько в ваших данных есть уникальные ключи. NB. В любом случае, это не занимает столько памяти, сколько требуется для карты, а mapreduce - это интенсивные задачи памяти и процессора, поэтому вы должны помнить об этом – Jijo