Hadoop で使用しようとしているサードパーティ クラスがあるため、それを実装する必要がありますWritable。問題は、Hadoop が使用する方法Writableが object を作成しo = SomeObject()、次に de-serialize を呼び出すo.readFields(in)ことであり、私の状況では空のオブジェクトを作成できないことです。
public abstract class Cube {
protected final int size;
protected Cube(int size) { this.size = size; }
}
注意事項sizeですfinal。
public class RealCube {
public Cube(int size) { super(size); }
}
ここRealCubeでは、呼び出すスーパー コンストラクターが 1 つだけあり、そのコンストラクターがfinal抽象スーパー クラスに変数を設定します。
public class RealCubeWritable implements Writable {
public void readFields(DataInput in) {
/* yikes! need to set the size */
}
}
を実装しようとするとRealCubeWritable、コンストラクターを持つことができず、ストリームを調べるまでRealCubeWritable()実際のことを知ることができません。sizeDataInput
したがって、Hadoop でこれを行う唯一の方法はラッパーを使用することです。私が疑問に思っているのは、ラッパーを使用する方法があるかどうかですが、RealCubeWritableそれでも動作しRealCubeますか? 動的プロキシ クラスの使用を検討しましたが、これが機能するかどうか (または実際にどのように行うか) はわかりません。
ありがとう!