[
https://issues.apache.org/jira/browse/MAPREDUCE-2814?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Eli Collins moved HADOOP-5452 to MAPREDUCE-2814:
------------------------------------------------
Issue Type: Bug (was: Improvement)
Key: MAPREDUCE-2814 (was: HADOOP-5452)
Project: Hadoop Map/Reduce (was: Hadoop Common)
> Relax the strict type check by allowing subclasses pass the check
> -----------------------------------------------------------------
>
> Key: MAPREDUCE-2814
> URL: https://issues.apache.org/jira/browse/MAPREDUCE-2814
> Project: Hadoop Map/Reduce
> Issue Type: Bug
> Reporter: He Yongqiang
>
> The type check like:
> {code}
> if (key.getClass() != keyClass)
> throw new IOException("wrong key class: "+key.getClass().getName()
> +" is not "+keyClass);
> if (val.getClass() != valClass)
> throw new IOException("wrong value class: "+val.getClass().getName()
> +" is not "+valClass);
> {code}
> is used a lot when a type check is needed.
> I found their uses in org.apache.hadoop.io.SequenceFile,
> org.apache.hadoop.mapred.IFile, org.apache.hadoop.mapred.MapTask. Because i
> search with(key.getClass() != keyClass), so these codes may also appear in
> other classes.
> I suggest we can relax the strict type check by using
> {code}
> if (key.getClass().isAssignableFrom(keyClass))
> {code}
> The error in my situation is listed below:
> {panel:borderStyle=dashed| borderColor=#ccc| titleBGColor=#F7D6C1|
> bgColor=#FFFFCE}
> java.io.IOException: Type mismatch in value from map: expected
> cn.ac.ict.vega.type.Type, recieved cn.ac.ict.vega.type.Type$Float
> at
> org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:553)
> at
> cn.ac.ict.vega.parse.mapreduce.block.FilterColumnBlockMapper.map(FilterColumnBlockMapper.java:77)
> at
> cn.ac.ict.vega.parse.mapreduce.block.BlockMapRunner.run(BlockMapRunner.java:33)
> at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
> at org.apache.hadoop.mapred.Child.main(Child.java:155)
> {panel}
> Float is a sub class of Type. I wish it can pass the check. I use Type
> instead of Float is because i can not determint exactly whether it is Float,
> String or some others.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira