使用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相同的命令

大功告成

原文地址:https://www.cnblogs.com/yyfyl/p/15033309.html