2
我已經寫了下面的UDF:Hadoop的蜂巢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文件夾,我跑了follwing編譯命令編譯:
javac -cp /usr/lib/hive/lib/hive-exec-0.10.0-cdh4.3.0.jar ISO8601ToHiveFormat.java
和supsequntly我包裝成一個罐子
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