私はPythonプラグインdumbo用に作成したhadoopストリーミングジョブのドライバ拡張子mongo-hadoopをセットアップしようとしています。java.lang.ClassCastException拡張クラスにキャストしていても
ダンボプロジェクトでは、TypedBytesWritableクラスを使用する必要があります。
package com.mongodb.hadoop;
public class TypedBytesTableInputFormat implements InputFormat<TypedBytesWritable, TypedBytesWritable> {
@Override
public RecordReader<TypedBytesWritable, TypedBytesWritable> getRecordReader(InputSplit split,
JobConf job,
Reporter reporter) {
if (!(split instanceof MongoInputSplit))
throw new IllegalStateException("Creation of a new RecordReader requires a MongoInputSplit instance.");
final MongoInputSplit mis = (MongoInputSplit) split;
//**THE FOLLOWING LINE THROWS THE ERROR**
return (RecordReader<TypedBytesWritable, TypedBytesWritable>) new TypedBytesMongoRecordReader(mis);
}
そして、ここでは、拡張RecordReaderです::だから私はそうのような新しいのInputFormat & RecordReader作ら
package com.mongodb.hadoop.input;
...
...
import org.apache.hadoop.mapreduce.RecordReader;
...
...
public class TypedBytesMongoRecordReader extends RecordReader<TypedBytesWritable, TypedBytesWritable> {
public TypedBytesMongoRecordReader(MongoInputSplit mis) {
_cursor = mis.getCursor();
}
@Override
public void close() {
if (_cursor != null)
_cursor.close();
}
をしかし、私は仕事を実行すると、このエラーがスローされます。私はなぜそれがRecordReaderの子供であるかわからない。私は間違って何をしていますか?次に、RecordReaderクラスのAPIドキュメントを示します。
http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapreduce/RecordReader.html
を私はRecordReaderにキャストされているライン上の警告、ないエラーを得るか、そしてそれがうまくjarファイルを作成します:私はすべてを正しくやったと思いました。警告:
Type safety: Unchecked cast from TypedBytesMongoRecordReader to RecordReader<TypedBytesWritable,TypedBytesWritable>
クラスが同じクラスローダに住んでいますか? – mschonaker
ああ。 1つはパッケージcom.mongodb.hadoopにあり、もう1つはパッケージcom.mongodb.hadoop.inputにあります。それは私の問題を引き起こすだろうか?それとも別のことを意味しましたか?私はJavaが初めてです。 :) – Nathan
キャストは必要ありません。多相性のためにあなたが正しく継承されていれば。キャストを削除し、コンパイラが何を表示しているかを確認します。 – Dunes