-1

これは map/reduce の私の最初のプログラムです。従来の単語カウント プログラムの代わりに、ファイル内の母音と子音の数をカウントしようとしました。以下は私のコードです。

マッパー:

public class VowelConsMapper extends Mapper {

public void map(LongWritable mapKey,Text mapValue,Context context) throws IOException, InterruptedException{

    String line = mapValue.toString();
    String[] letters = line.split("");

    for(String letter : letters){
        System.out.println(letter);
        if(letter!=" "){
            if(isVowel(letter))
                context.write(new Text("Vowel"), new IntWritable(1));
            else
                context.write(new Text("Consonant"), new IntWritable(1));
        }
    }
}

private boolean isVowel(String letter) {
    // TODO Auto-generated method stub
    if(letter.equalsIgnoreCase("a")||letter.equalsIgnoreCase("e")||letter.equalsIgnoreCase("i")||letter.equalsIgnoreCase("o")||letter.equalsIgnoreCase("u"))
        return true;
    else
        return false;
}

}

レデューサー:

public class VowelConsReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    public void reducer(Text letterType,Iterable<IntWritable> values,Context context) throws IOException, InterruptedException{
        int sum = 0;
        for(IntWritable value:values){
            sum += value.get();
        }
        System.out.println(letterType+"     "+sum);
        context.write(letterType, new IntWritable(sum));
    }
}

運転者:

public class VowelConsDriver {

public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

    Configuration conf = new Configuration();
    conf.addResource(new Path("/home/hadoop/hadoop-1.0.3/conf/core-site.xml"));
    Job job = new Job(conf,"VowelConsDriver");

    job.setJarByClass(VowelConsDriver.class);
    job.setMapperClass(VowelConsMapper.class);
    job.setReducerClass(VowelConsReducer.class);

    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(IntWritable.class);

    // TODO: specify output types
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    FileInputFormat.addInputPath(job, new Path("/user/hadoop/WCinput"));
    FileOutputFormat.setOutputPath(job, new Path("/user/hadoop/VowelConsOP1"));

    job.waitForCompletion(true);
}

}

次の o/p を与えています: 子音 1 子音 1 子音 1 ................ ................ ...... …………………………………… ..... 母音 1 母音 1 母音 1 母音 1 ................ ................ ................ ……………………………… ....

ここで、各カテゴリの子音と母音の合計数を期待していますコードを正しくフォーマットしていなかったら申し訳ありません...&よろしくお願いします!

4

2 に答える 2

1

reduce is メソッドのシグネチャは " public void reduce()" not " public void reducer()" です。上記の変更により、期待どおりの出力が得られます。

于 2013-08-17T20:25:08.050 に答える