You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Seoeun Park (JIRA)" <ji...@apache.org> on 2011/08/05 02:32:29 UTC

[jira] [Commented] (HIVE-2190) WritableDoubleObjectInspector throws ClassCastException when is used in GenericUDF.

    [ 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