[ 
https://issues.apache.org/jira/browse/HIVE-2190?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Seoeun Park resolved HIVE-2190.
-------------------------------

    Resolution: Invalid

> 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

        

Reply via email to