2

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

        }

    }
4

1 に答える 1

3

reduce メソッドの署名が間違っています - 2 番目の引数は次のようにする必要があり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 にも同様の機能があると確信しています。

于 2012-06-08T22:32:31.513 に答える