Java:使用java和外部API的类强制转换异常

时间:2012-08-28 08:58:22

标签: java exception hadoop

我正在写一个基于jave的hadoop map reduce代码 - 。我正在调用外部库来处理我的数据。我得到了类强制转换异常。 请告诉我原因和可能的解决方案。

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

由于

1 个答案:

答案 0 :(得分:0)

该异常通常意味着您正在尝试错误地投射某些内容。 如果你这样做:

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

然后由于(DocR) foo,您将获得ClassCastException,因为Text实例绝不是DocR对象。

我认为你得到了错误发生的行。方法声明通常不会导致类强制转换异常。

在AnnotationExtrationMapper.java中搜索(DocR)。该演员可能出现在问题所在的任何地方。