I've booked this on https://issues.apache.org/jira/browse/HIVE-7588.
With the patch, something like below are possible.
// unknown input
public String evaluate(Object arg) {
return arg == null ? null : String.valueOf(arg);
}
// typed variable
public <T> T evaluate(T arg) {
return arg;
}
// typed variable, nested
public <T> T evaluate(Map<String, T> arg) {
return arg.values().iterator().next();
}
Thanks,
Navis
2014-07-31 3:37 GMT+09:00 Jason Dere <[email protected]>:
> Sounds like you are using the older style UDF class. In that case, yes
> you would have to override evaluate() for each type of input.
> You could also try overriding the GenericUDF class - that would allow you
> to do a single method, though it may be a bit more complicated (can look at
> the Hive code for some examples)
>
>
> On Jul 30, 2014, at 7:43 AM, Dan Fan <[email protected]> wrote:
>
> > Hi there
> >
> > I am writing a hive UDF function. The input could be string, int, double
> etc.
> > The return is based on the data type. I was trying to use the generic
> method, however, hive seems not recognize it.
> > Here is the piece of code I have as example.
> >
> > public <T> T evaluate(final T s, final String column_name, final int
> bitmap) throws Exception {
> >
> > if (s instanceof Double)
> > return (T) new Double(-1.0);
> > Else if( s instance of Integer)
> > Return (T) new Integer(-1) ;
> > …..
> > }
> >
> > Does anyone know if hive supports the generic method ? Or I have to
> override the evaluate method for each type of input.
> >
> > Thanks
> >
> > Dan
> >
>
>
> --
> CONFIDENTIALITY NOTICE
> NOTICE: This message is intended for the use of the individual or entity to
> which it is addressed and may contain information that is confidential,
> privileged and exempt from disclosure under applicable law. If the reader
> of this message is not the intended recipient, you are hereby notified that
> any printing, copying, dissemination, distribution, disclosure or
> forwarding of this communication is strictly prohibited. If you have
> received this communication in error, please contact the sender immediately
> and delete it from your system. Thank You.
>