1

キーの数と同じ数のレデューサーを取得しようとしています

public class CustomPartitioner extends Partitioner<Text, Text>
{
    public int getPartition(Text key, Text value,int numReduceTasks)
   {
        System.out.println("In CustomP");
       return (key.toString().hashCode()) % numReduceTasks;
   }
} 

ドライバークラス

job6.setMapOutputKeyClass(Text.class);
job6.setMapOutputValueClass(Text.class);
job6.setOutputKeyClass(NullWritable.class);
job6.setOutputValueClass(Text.class);
job6.setMapperClass(LastMapper.class);
job6.setReducerClass(LastReducer.class);
job6.setPartitionerClass(CustomPartitioner.class);
job6.setInputFormatClass(TextInputFormat.class);
job6.setOutputFormatClass(TextOutputFormat.class);

しかし、私は単一のファイルにootputを取得しています。

私は何か間違ったことをしていますか

4

4 に答える 4

2

指定せずにレデューサーの数を制御することはできません:-)。ただし、入力データで取得する個別のキーの数がわからず、ハッシュ パーティション関数が 2 つの個別のキーに対して同じ数を返す可能性があるため、異なるレデューサーですべてのキーを確実に取得することはできません。ソリューションを実現したい場合は、個別のキーの数を事前に知ってから、それに応じてパーティション関数を変更する必要があります。

于 2014-06-17T11:02:51.587 に答える
1

キーの数に等しい削減タスクの数を指定する必要があります。また、パーティショナー クラスのキーに基づいてパーティションを返す必要があります。たとえば、入力に 4 つのキー (ここでは木材、石材、鉄筋コンクリートなど) がある場合、getPartition メソッドは次のようになります。

 public int getPartition(Text key, PairWritable value, int numReduceTasks) {
        // TODO Auto-generated method stub

        String s = value.getone();

        if (numReduceTasks ==0){
            return 0;
        }

        if(s.equalsIgnoreCase("wood")){

            return 0;
        }

        if(s.equalsIgnoreCase("Masonry")){
            return 1%numReduceTasks;
        }

        if(s.equalsIgnoreCase("Reinforced Concrete")){
            return 2%numReduceTasks;
        }
        if(s.equalsIgnoreCase("Reinforced Masonry")){
            return 3%numReduceTasks;
        }

        else
            return 4%numReduceTasks;

    }   

}

対応する出力は、それぞれのレデューサーに収集されます。Eclipse の代わりに CLI で実行してみてください

于 2014-06-17T13:07:06.970 に答える
0

Veni、以下のようにタスクをチェーンする必要があります

Mapper1 --> Reducer --> Mapper2 (Post Processing Mapper which creates
file for Each key)

Mapper 2 is InputFormat は NlineInputFormat である必要があるため、各キーのレデューサーの出力には対応するマッパーがあり、Mapper の出力はキーごとに個別のファイルになります。

Mapper 1 と Reducer は既存の MR ジョブです。

お役に立てれば。

乾杯
ナグ

于 2014-06-22T22:48:38.917 に答える