[ https://issues.apache.org/jira/browse/HIVE-2190?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13079705#comment-13079705 ]
Seoeun Park commented on HIVE-2190: ----------------------------------- Should use DoubleWritable in serde2.io package instead in Hadoop. > WritableDoubleObjectInspector throws ClassCastException when is used in > GenericUDF. > ----------------------------------------------------------------------------------- > > Key: HIVE-2190 > URL: https://issues.apache.org/jira/browse/HIVE-2190 > Project: Hive > Issue Type: Bug > Components: Serializers/Deserializers > Affects Versions: 0.7.0 > Environment: Ubuntu 10.10 > Reporter: Seoeun Park > Priority: Minor > > WritableDoubleObjectInspector throws ClassCastException when I use it in > GenericUDF. > I think it is because the type of DoubleWritable is in > WritableDoubleObjectInspector is org.apache.hadoop.hive.serde2.io instead of > org.apache.hadoop.io. > In WritableDoubleObjectInspector, > org.apache.hadoop.hive.serde2.io.DoubleWritable works fine in GenericUDAF but > not in GenericUDF. > Here, it is query and sample code: > select to_double("1234.11") from src; > {code} > public class GenericUDFToDouble extends GenericUDF { > private ObjectInspectorConverters.Converter[] converters; > private ObjectInspector[] argumentOIs; > private ObjectInspector returnInspector; > @Override > public ObjectInspector initialize(ObjectInspector[] arguments) throws > UDFArgumentException { > converters = new > ObjectInspectorConverters.Converter[arguments.length]; > for (int i = 0; i < arguments.length; i++) { > converters[i] = > ObjectInspectorConverters.getConverter(arguments[i], > > PrimitiveObjectInspectorFactory.writableStringObjectInspector); > } > argumentOIs = arguments; > returnInspector = > PrimitiveObjectInspectorFactory.writableDoubleObjectInspector; > return returnInspector; > } > private DoubleWritable doubleResult = new DoubleWritable(); > @Override > public Object evaluate(DeferredObject[] arguments) throws HiveException > { > if (arguments[0].get() == null) { > return null; > } > try { > Text value1 = (Text) > converters[0].convert(arguments[0].get()); > > doubleResult.set(Double.parseDouble(value1.toString())); > return doubleResult; > } catch (Exception e) { > e.printStackTrace(); > return null; > } > } > public String getDisplayString(String[] children) { > return "to_double"; > } > > } > {code} > Exception trace > =============================== > Caused by: java.lang.ClassCastException: org.apache.hadoop.io.DoubleWritable > cannot be cast to org.apache.hadoop.hive.serde2.io.DoubleWritable > at > org.apache.hadoop.hive.serde2.objectinspector.primitive.WritableDoubleObjectInspector.get(WritableDoubleObjectInspector.java:37) > at > org.apache.hadoop.hive.serde2.lazy.LazyUtils.writePrimitiveUTF8(LazyUtils.java:200) > at > org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:442) > at > org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serializeField(LazySimpleSerDe.java:396) > at > org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.serialize(LazySimpleSerDe.java:383) > at > org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:553) > at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471) > at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744) > at > org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84) > at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471) > at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744) > at > org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:78) > at org.apache.hadoop.hive.ql.exec.Operator.process(Operator.java:471) > at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:744) > at > org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:527) > ... 5 more > ======================================= -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira