Hive UDF 函数编写
hive中的自定函数有三种类型:
UDF 一进一出
UDAF 聚集函数,多进一出。Count/max/min
UDTF 一进多出
今天从udf开始,语言使用java,继承 UDF类,重写evaluate方法(支持重载):
import org.apache.hadoop.hive.ql.exec.UDF;
public class hr extends UDF {
public static int evaluate(String j) {
String a = j.split(",")[1].replace("\"", "").replace("{", "").replace("}", "");
String b = a.split(":")[1];
int d = Integer.parseInt(b);
int c = d * 5 - 10;
return c;
}
public static void main(String[] args) {
String s = "{\"id\":\"1193\",\"rate\":\"5\"}";
System.out.println(evaluate(s));
}
}
编写完成后直接打包,将jar包添加到hive
add jar /Users/xxxxx/Desktop/hiveuse-1.0.jar
create temporary function hr as 'hr';
注意:as 后面是: 包名+方法名(foramt as:com.hiveuse.hr)
且创建方法是临时的function(只对当前窗口有效)。
删除临时函数:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
创建永久函数:CREATE TEMPORARY FUNCTION function_name AS class_name USING JAR path(一般都是hdfs的路径);
(CREATE FUNCTION hr AS 'org.apache.hadoop.hive.ql.udf.HelloUDF'
USING JAR 'hdfs://hostname:9000/xxx/xxxx-1.0.jar';)
使用:show functions to check if it created.
使用直接可以: select hr(filed_name) from xxxx;
|