Hadoop outputCollector - PullRequest
       1

Hadoop outputCollector

1 голос
/ 11 октября 2011

У меня есть программа mapreduce, и она работает нормально, ниже приведены подписи карты и функции сокращения. Выходной коллектор в настоящее время составляет

output.collect(newtext, new IntWritable(someintegervalue like 5)); //works ok

Мне нужно изменить это для обработки / вывода двойных значений. (нужно разделить два целых числа, чтобы получить двойной результат). Я попытался изменить outputcollector следующим образом

output.collect(newtext, new DoubleWritable(somedoublevalue like 5.1))

и compile / run имеет проблемы. Надеемся минимизировать изменения в сигнатурах Map и Reduce, так как программа работает нормально, нужно только получать выходные данные в двойных числах вместо целых.

Ниже приведена текущая карта. Уменьшите подписи и работайте нормально.

class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> 

map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException

public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> 

public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Не забывайте, что вам нужно указывать выходные классы при настройке вашей работы, например, вам нужно написать:

conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(DoubleWritable.class);

В противном случае он будет жаловаться так:

"type mismatch value from map: expected org.apache.hadoop.io.IntWritable,
 recieved org.apache.hadoop.io.DoubleWritable"
1 голос
/ 11 октября 2011

Судя по вашему комментарию, вы не везде меняли подпись.Вам нужно изменить их на следующее:

class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, DoubleWritable> 

map(LongWritable key, Text value, OutputCollector<Text, DoubleWritable> output, Reporter reporter) throws IOException

public static class Reduce extends MapReduceBase implements Reducer<Text, DoubleWritable, Text, DoubleWritable> 

public void reduce(Text key, Iterator<DoubleWritable> values, OutputCollector<Text, DoubleWritable> output, Reporter reporter) throws IOException {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...