0

Java ベースの Hadoop マップ削減コードを作成しています -- . データを処理するために外部ライブラリを呼び出しています。クラスキャスト例外が発生しています。原因と考えられる解決策を教えてください。

public void map(Object key, DocR value, Context context) {

    DataToHdfs test = null;
    try {
        docs = new DocR(new File(AnnotationExtration.INPUT_LOCATION));


     compiledAql=AnnotationExtration.aog;

    SystemX.Single syst = new SystemX.Single(compiledAql, AnnotationExtration.docSchema);
    String combinedResult="";
    while (docs.hasNext()) {

........いくつかの処理を行い、データ HDFS を送信します。

if((combinedResult)!=null){

                            test.writToHdfs(combinedResult);
                        }
                System.out.println(combinedResult);


                // Writing to HDFS.
 context.write(new Text("1",),new Text(combinedResult));

例外は:--

java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to com.somepackage.api.DocR
at   com.somePackage.AnnotationExtrationMapper.map(AnnotationExtrationMapper.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:212)
12/08/28 13:02:23 INFO mapred.JobClient:  map 0% reduce 0%
12/08/28 13:02:23 INFO mapred.JobClient: Job complete: job_local_0001

ありがとう

4

1 に答える 1

0

この例外は通常、何かを間違ってキャストしようとしていることを意味します。もしあなたがそうするなら:

Text foo = new Text("bar");
map(someKey, (DocR) foo, someContext);

インスタンスは決してオブジェクトではないため(DocR) foo、が原因で ClassCastException が発生します。TextDocR

例外が発生する行が間違っていると思います。通常、メソッド宣言によってクラス キャスト例外が発生することはありません。

AnnotationExtrationMapper.java で を検索し(DocR)ます。そのキャスト演算子は、問題のある場所に存在する可能性があります。

于 2012-08-28T09:28:58.290 に答える