функция Hadoop reduce не исключена?
Я запускаю программу mapreduce, но я понимаю, что, хотя я пишу функцию reduce, mapreduce не превосходит ее. Затем я пытаюсь добавить @Override
, ошибка говорит, что функция reduce не переопределяет никакие супер методы.
Информация о конфигурации задания приведена ниже
preProcess.setJobName("GeneProcessing program for 100 SNP");
preProcess.setMapperClass(PreprocessMapper.class);
preProcess.setReducerClass(PreprocessReducer.class);
preProcess.setInputFormatClass(TextInputFormat.class);
//setInputFormat(TextInputFormat.class);
preProcess.setOutputFormatClass(TextOutputFormat.class);
preProcess.setMapOutputKeyClass(Text.class);
preProcess.setMapOutputValueClass(Text.class);
preProcess.setOutputKeyClass(NullWritable.class);
preProcess.setOutputValueClass(Text.class);
//preProcess.setNumMapTasks(4);
preProcess.setNumReduceTasks(4);
FileInputFormat.setInputPaths(preProcess, preprocessInputPath);
FileOutputFormat.setOutputPath(preProcess, preprocessOutputPath);
//JobClient.runJob(preProcess);
preProcess.waitForCompletion(true);
Уменьшить код, как показано ниже
import java.io.*;
import java.util.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Reducer;
public class PreprocessReducer extends Reducer<Text, Text, NullWritable, Text>
{
public Text newKey = new Text("");
//no enter the reduce task
@Override
protected void reduce(Text key, Iterator<Text> values, Context output)
throws IOException, InterruptedException
{
do something here
}
}
1 ответ:
Ваша подпись для метода reduce неверна - второй аргумент должен быть
Iterable<Text>
, а неIterator<Text>
:@Override protected void reduce(Text arg0, Iterable<Text> arg1, Context arg2) throws IOException, InterruptedException { }
Какую IDE вы используете? В Eclipse есть пункт меню Source -> Override / Implement method, который значительно упрощает получение правильной подписи. Я уверен, что Netbeans имеет аналогичную функцию.