1

こんにちは、最大温度を見つける map reduce コードを書いています。問題は、最大温度を取得していますが、対応するキーがないことです。

public static class TemperatureReducer extends Reducer<Text,IntWritable,Text,IntWritable>{

Text year=new Text();

int maxTemperature=Integer.MIN_VALUE;
    public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

        for(IntWritable valTemp:values) {
            maxTemperature=Math.max(maxTemperature, valTemp.get());
        }

        //System.out.println("The maximunm temperature is " + maxTemperature);
        context.write(year, new IntWritable(maxTemperature));
    }
}

マッパーは次のように想像します

1955  52
1958  7
1985  22
1999  32

等々。

キーを上書きし、すべてのデータを印刷しています。私は最高気温とその年だけが欲しいです。

4

1 に答える 1

1

あなたのコード サンプルにはいくつか問題があります。

  1. reduce メソッド内の maxTemperature を (最初のステートメントとして) リセットします。現時点では、先行するすべてのキー/値で見られる最大温度が出力されるというバグがあります。

  2. の内容をどこで設定していますyearか? 実際には必要ありませんcontext.write(key, new IntWritable(maxTemperature);。入力キーが年であるため、呼び出すだけです

  3. 出力値を書き出すときに、新しい IntWritable を作成するのではなく、 IntWritable インスタンス変数を作成して再利用したい場合があります (これは、問題の潜在的な原因ではなく、効率の問題です)。

于 2012-04-26T10:02:21.110 に答える