使用eclipse编写UDF函数
1.创建maven项目
编写代码(代码实现的功能是将字符中的字母转换为特定的数字) 运行的结果是1410402
public class CodeToNum extends UDF { public String evaluate(String s){ String regex=".*[a-zA-Z]+.*"; Matcher m=Pattern.compile(regex).matcher(s); if(m.matches()){ String s4=s.substring(0, 1); String s5=s.substring(1, 2); String s_num_1=String.valueOf(s.substring(2,4)); String s6 = s.substring(4,5); String s_num_2 = String.valueOf(s.substring(5)); int value_1 = Integer.valueOf(s4.toCharArray()[0]); int value_2 = Integer.valueOf(s5.toCharArray()[0]); int value_3 = Integer.valueOf(s6.toCharArray()[0]); String s_last = String.valueOf(value_1-55)+String.valueOf(value_2-55)+s_num_1+String.valueOf(value_3-55)+s_num_2; return s_last; }else{ return s; } } public static void main(String[] args){ System.out.print(new CodeToNum().evaluate("E80472")); } }
2.利用assembly打jar包
右击工程文件选择run as ->maven build...
打成jar包后,rz上传jar包
然后进入hive执行命令add jar 路径下的jar包
(1)创建临时函数的方法
create temporary function say_hello as 'cn.zhangyu.HelloUdf';
say_hello 函数的名字 自己随便定义
cn.zhangyu.HelloUdf 包+类名
临时定义的函数只对当前的session有效
(2)创建永久函数的方法
hdfs dfs -put jar包的路径 hdfs路径
进入hive
执行 create function 库名.函数名 as 'cn.zhangyu.HelloUdf' using jar 'hdfs的路径'
例如我的就是create function dw.codetonum as 'com.hjhn.func.CodeToNum' USING JAR 'hdfs:///tmp/udf/udf-1.0CodeToNum-SNAPSHOT..jar'
注意点:如果udf函数使用的时候爆出invalid function 试着用beeline 进入hive
然后!connect jdbc:hive2://node01:10000 输入用户名和密码
接下来执行和hive相同的命令
大功告成