1

私は Java で Hadoop の作業を行っている .NET プログラマーです。Hadoop で、Map ジョブの出力キーが type である Map-Reduce ジョブをセットアップしようとしていますTuple<IntWritable,Text>。次のようにsetOutputKeyclassを使用して出力キーを設定すると

JobConf conf2 = new JobConf(OutputCounter.class);
conf2.setOutputKeyClass(Tuple<IntWritable,Text>.class);

ジェネリックと「.class」表記がうまくいかないように見えるため、大量のエラーが発生します。以下は正常に動作しますが

JobConf conf2 = new JobConf(OutputCounter.class);
conf2.setOutputKeyClass(IntWritable.class);

出力キークラスを設定する方法についての指針はありますか?

乾杯、ユルゲン

4

1 に答える 1

4

Java では、ジェネリックはコンパイル時に消去されるため、できる最善の方法は次のとおりです。

 conf2.setOutputKeyClass(Tuple.class);

可能であれば、これを改善するために、タプルをサブクラス化して実行時に型を保持できます。

 public class IntWritableTextTuple extends Tuple<IntWritable, Text> {}

そして、それを setOutputKeyClass のパラメータとして使用します。

注意してください、私はHadoopについて何も知らないので、これはそこで意味をなさないかもしれませんが、一般的にJava Genericsでは、これがあなたがすることです.

于 2009-07-20T22:10:58.153 に答える