hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jason Dere (JIRA)" <>
Subject [jira] [Commented] (HIVE-5306) Use new GenericUDF instead of basic UDF for UDFAbs class
Date Wed, 18 Sep 2013 22:02:52 GMT


Jason Dere commented on HIVE-5306:

Couple comments:

1. You can probably get away with making all of the fields transient.
2. Since you've only defined abs() to work with int/long/double/decimal, I believe initialize()
will fail if abs() is called with other types which one might expect to work, such as tinyint/smallint/float/string.
 For non-generic UDFs, what would happen would be that FunctionRegistry.getMethodInternal()
would determine that tinyint/smallint/float/string could be converted to one of int/long/double/decimal
and make the conversion at the time the UDF is called. Unfortunately for GenericUDFs, I think
you have to do that logic yourself.

Maybe you can do something like so:
(define Converter inputConvertor)
    switch (inputType) {
    case BYTE:
    case SHORT:
    case INT:
      // Use converter to convert input type to your supported type
      inputConverter = ObjectInspectorConvertors.getConvertor(arguments[0], PrimitiveObjectInspectorFactory.writableIntObjectInspector);
      outputOI = PrimitiveObjectInspectorFactory.writableIntObjectInspector;
    case LONG:
      inputConvertor = ObjectInspectorConvertors.getConvertor(arguments[0], PrimitiveObjectInspectorFactory.writableLongObjectInspector);
      outputOI = PrimitiveObjectInspectorFactory.writableLongObjectInspector;

> Use new GenericUDF instead of basic UDF for UDFAbs class
> --------------------------------------------------------
>                 Key: HIVE-5306
>                 URL:
>             Project: Hive
>          Issue Type: Improvement
>          Components: UDF
>            Reporter: Mohammad Kamrul Islam
>            Assignee: Mohammad Kamrul Islam
>         Attachments: HIVE-5306.1.patch, HIVE-5306.2.patch, HIVE-5306.3.patch
> GenericUDF class is the latest  and recommended base class for any UDFs.
> This JIRA is to change the current UDFAbs class extended from GenericUDF.
> The general benefit of GenericUDF is described in comments as 
> "* The GenericUDF are superior to normal UDFs in the following ways: 1. It can
>  * accept arguments of complex types, and return complex types. 2. It can accept
>  * variable length of arguments. 3. It can accept an infinite number of function
>  * signature - for example, it's easy to write a GenericUDF that accepts
>  * array<int>, array<array<int>> and so on (arbitrary levels of nesting).
4. It
>  * can do short-circuit evaluations using DeferedObject."  

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message