hive增加临时函数
要自定一个hive的函数,步骤如下
1、写一个java类 要继承org.apache.hadoop.hive.ql.exec.UDF类实现evaluate
下面是一个替换字符串的函数,因为函数以后是在hadoop上运行,所以数据类型是hadoop的数据类型
引入的jar包:hive的所有jar 和 hadoop的hadoop-common-2.5.2.jar
package hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class CharRepace extends UDF{
public Text evaluate(Text in,Text old, Text n){
String result = in.toString().replace(old.toString(), n.toString());
return new Text(result);
}
}
把上面的代码打成NUDF.jar
hive> add jar /root/NUDF.jar;
3、创建临时函数
hive> create temporary function replace as 'hive.udf.CharRepace;
4.测试一下是否成功
hive> select replace(nation,'\t','') from tableName;
注意:这种方法每次使用都要add,create一下
add jar /root/NUDF.jar;drop temporary function replace;create temporary function replace as 'hive.udf.CharRepace; |
hive编译,增加正式函数
上面只是添加临时的函数,如果想添加为正式函数,可以把代码添加到hive中,在重新编译jar。
编译步骤如下
1、把上面的java文件复制到 apache-hive-0.13.1-src/ql/src/java/org/apache/hadoop/hive/ql/udf 下边。当然java的package 要修改成package org.apache.hadoop.hive.ql.udf;
2、修改 org.apache.hadoop.hive.ql.exec.FunctionRegistry
添加 import org.apache.hadoop.hive.ql.udf.CharRepace;
registerUDF("strrc", CharRepace.class, false); "strrc"是你的函数名
3、cd到apache-hive-0.13.1-src/ql目录下
执行编译任务mvn clean package -Phadoop-2 -Pdist -DskipTests -Dtar
mvn如果没有安装就要安装一下,
-Phadoop-2 是说明hadoop是用的hadoop2,如果用的是hadoop1 ,则改成 -Phadoop-1
4、经过上面的编译后,在当前文件夹生成了一个target文件夹,复制里面的hive-exec-0.13.1.jar ,替换掉你hive安装程序lib目录下的相同jar包
5、启动hive测试一下你的函数是否增加成功