hadoop hive udf失败

hadoop hive udf失败,hadoop,hive,user-defined-functions,Hadoop,Hive,User Defined Functions,我已经编写了以下UDF: ISO8601ToHiveFormat.java: package hiveudfs; import org.apache.hadoop.hive.ql.exec.UDF; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ISO8601ToHiveFormat extends UDF { publ

我已经编写了以下UDF:

ISO8601ToHiveFormat.java:

package hiveudfs;

import org.apache.hadoop.hive.ql.exec.UDF;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ISO8601ToHiveFormat  extends UDF {

    public String hourFromISO8601(final String d){
        try{
            if( d == null )
                return null;
            SimpleDateFormat sdf1= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf2.format(sdf1.parse(d)); 
        } catch (ParseException pe) {
            return null;
        }
    }
}
在我的项目的src文件夹中,我运行了以下编译命令来编译它:

javac -cp /usr/lib/hive/lib/hive-exec-0.10.0-cdh4.3.0.jar  ISO8601ToHiveFormat.java
我意外地把它装进了一个罐子里

jar cf ../../HiveUDFs.jar hiveudfs/ISO8601ToHiveFormat.*
于是,我启动了蜂巢,并做了:

hive> add jar /home/tom/Java/HiveUDFs.jar;
Added /home/tom/Java/HiveUDFs.jar to class path
Added resource: /home/tom/Java/HiveUDFs.jar
hive> create temporary function hourFromISO8601 as 'hiveudfs.ISO8601ToHiveFormat';
OK
Time taken: 0.083 seconds
hive> SELECT hourFromISO8601(logtimestamp) FROM mytable LIMIT 10;
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments 'logtimestamp': No matching method for class hiveudfs.ISO8601ToHiveFormat with (string). Possible choices: 
hive>
产量

hive> describe mytable;
OK
...
logtimestamp    string
...

我做错了什么?

toom-您必须重写此(评估)方法。那么只有UDF有效

    public class yourclassname extends UDF {

       public String **evaluate**(your args) {

         // your computation logic

         return your_result;
    }

}

正如ramisetty.vijay所说,您需要重写evaluate()方法。注意:您可以使用不同的输入参数和返回类型提供多个evaluate实现