2012-04-26 18 views
1

こんにちは、マップのコードを書き、最高温度を見つけています。問題は、最高温度が得られているが、対応するキーがないことです。その上Map Reduce - リジッドキーを取得することができません

1955 52 
1958 7 
1985 22 
1999 32 

など

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)); 
    } 
} 

マッパーイマジン。

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

答えて

1

私はあなたのコードサンプルと間違って物事のカップルを参照してください。

  1. は、あなたがそれを出力することでバグを持った瞬間に、(最初の文のように)メソッドを減らすの内側maxTemperatureをリセット前のすべてのキー/値の最大温度。

  2. ここでは、yearの内容を設定していますか。実際に入力する必要はありません。context.write(key, new IntWritable(maxTemperature);を入力キーとして使用します。

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

+0

非常にありがとう。これはバグを解決しました。 Hadoopの新機能だから何らかの方法で、私のコードは出力フォルダを削除することができます。私はコードを実行すると、手動で削除する必要があります。 –

+0

あなたのドライバコード(Configuredを拡張してツールを実装するクラス)では、 'FileSystem.get(getConf())。delete(new Path(outputFolder)、true)'を呼び出すことができます。 'outputFolderは出力フォルダ名前/パス –

関連する問題