0

単純な Hadoop プログラムを実行していますが、次のエラーが発生します。

java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org.apache.hadoop.io.LongWritable

マッパー:

public static class myMapper extends Mapper<LongWritable, Text, Text, Text>
public void map(LongWritable key, Text line,OutputCollector<Text,Text> output, Reporter reporter) throws IOException, InterruptedException

レデューサー:

public static class triangleCounterReducer extends Reducer<Text, Text, Text, Text> 
public void reduce(Text key,Iterable<Text> line,OutputCollector<Text,Text> output,Reporter reporter) throws IOException, InterruptedException

主要:

...
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
...

どうすればこれを修正できますか????

4

1 に答える 1

0

新しい API クラスを使用しているように見えますが (マッパーは mapred.Mapper を拡張します)、古い API を使用してマップ メソッドを記述しています (OutputCollector と Reporter を使用しています)。

マッパー マップ シグネチャとレデューサーの reduce メソッドを次のように変更します。

public void map(LongWritable key, Text value, Context context) { .. }
public void reduce(Text key, Iterable<Text> value, Context context) { .. }

メソッドの上に注釈を追加する@Overrideと、署名が間違っているとコンパイラが失敗する原因にもなります。

于 2013-02-02T19:50:05.893 に答える