Hive中自定义函数

实现

  1. 定义一个类,继承UDF,然后写evaluate方法

    查看UDF类,会发现并没有这个方法(版本1.2.1))),所以说重写有点牵强~

    源码中这样写到:

    Implement one or more methods named {@code evaluate} which will be called by Hive 
    (the exact way in which Hive resolves the method to call can be configured by setting a custom
    实现一个或者更多名为evaluate的方法,这个方法会被hive调用(这是hive去调用自定义方法最好的方式)
    
    {@code evaluate} should never be a void method. However it can return {@code null} i * needed.   
    evaluate不能定义为void返回,但是可以返回NULL
    
    public class UDFDemo extends UDF {
        /**
         *  参数是你方法输入的参数类型。
         *  有一点是如果传入的参数是bigint,要用Text(Hadoop io包的)
         *  返回类型是自定义的
         *  所有的参数以及返回类型可以是Java的也可以是hadoop io的
         */
        public String evaluate(String str,String b){
            //示例,就不验证了,意思一下
            return a+"_"+b;
        }
    }
    
  2. 打成jar包,放到服务器上

  3. 使用自定义函数

    1. 第一种(本session有效)
    # 导入jar包
    hive (zzy)> add jar /home/zzy/wc.jar;
    Added [/home/zzy/wc.jar] to class path
    Added resources: [/home/zzy/wc.jar]
    # 创建为临时的函数,函数名mycon(自定义的)
    hive (zzy)> create temporary function mycon as 'cn.zzy.hive.API.UDFDemo';
    OK
    Time taken: 0.019 seconds
    # 查看是否成功
    hive (zzy)> show functions like '*UDF*';
    OK
    UDFDemo
    Time taken: 0.005 seconds, Fetched: 1 row(s)
    hive (zzy)> select mycon('o','o');
    OK
    o_o
    
    1. 第二种(也是在本session有效,临时函数)

      1. vi ./hive-init
        add jar /home/zzy/wc.jar;
        create temporary function mycon as 'cn.zzy.hive.API.UDFDemo';
        
        #启动hive的时候带上初始化文件:这个文件位置可以任意,启动的时候填上路径就好了
        hive -i ./hive-init
        
    2. 第三种(永久函数 推荐

      1. 将编写的udf的jar包上传到服务器上

        hive>create function mycon as 'cn.zzy.hive.API.UDFDemo' using jar hdfs://hadoop001:9000/wc.jar;
        

        注意点:这样的函数是永久的(如果HDFS上文件不被删除),但是默认是default.mycon。即默认是在default库中,在别的库中调用写全称。

    3. 第四种(永久函数 推荐 )

      1. 在hive安装目录下新建一个auxlib文件假

      2. 将jar包放进去

        create temporary function mycon as 'cn.zzy.hive.API.UDFDemo';
        

        还是在default库中,全名default.mycon

    4. 其实还有很多。就不介绍了,最常用的说了。

你可能感兴趣的:(大数据)