Hive自定义函数

来源:互联网 发布:仁和知柏地黄丸浓缩丸 编辑:程序博客网 时间:2024/06/05 03:40

       hive内部包含了很多函数,但是这些可能仍不能满足我们的业务,hive提供了一些扩展,我们可以实现自己的函数。总体来说可以实现3类

       (1)UDF:普通的自定义函数。接受单行输入,并产生单行输出

       (2)UDAF:用户定义聚集函数(User-defined aggregate function)。接受多行输入,并产生单行输出。比如MAX,COUNT函数

       (3)UDTF:用户定义表生成函数(User-defined table-generating function)。接受单行输入,并产生多行输出(即一个表)。

UDF

     hive为我们提供了一个类UDF,继承该类然后重写evaluate方法,然后打成jar文件,在CLI模式下可以加载该jar,创建自己的函数

     1 自定义类实现自己的业务逻辑

           比如:将年龄转换成相关的字符串操作

                

       2  然后打成jar文件,放到hive的classpath下,hive启动后会自动加载该类

       3 可以再cli下使用该类自定义函数

               create temporary function  changeAgeToType  as 'com.hive.udf.ChangeAgeToType

      4 使用该函数

     注意:(1)如果当前hive已经启动,可以动态加载该jar文件

                          hive> add jar /usr/local/udf/changeAgeToType.jar

               (2)0.13版本之后可以讲某个函数永久的注册到当前数据库或者某一个数据库中

                         hive>   create  function  db_name.changeAgeToType  as 'com.hive.udf.ChangeAgeToType

               (3)0.13版本之后可以在创建函数时指定该jar文件,无需动态加载该jar

                         hive> create temporary function  changeAgeToType  using jar 'hdfs:///hive/udf/changeAgeToType.jar

 

UDAF

      使用自定义聚合函数需要我们实现类UDAFEvaluator,然后重写内部几个函数,具体的这些函数如何运行,可以参见Hive自定义函数

          下面是我的自定义的求所有人员年龄类,各个函数都有响应的说明。

           

       注意:

            1.需要import org.apache.hadoop.hive.ql.exec.UDAF以及org.apache.hadoop.hive.ql.exec.UDAFEvaluator,这两个包都是必须的

            2.函数类需要继承UDAF类,内部类Evaluator实现UDAFEvaluator接口

            3.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数

                     1)init函数类似于构造函数,用于UDAF的初始化

                     2)iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean

                     3)terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据,iterate和terminatePartial类似于hadoop的Combiner

                     4)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean

                    5)terminate返回最终的聚集函数结果

然后可以打成jar文件,自定义聚合函数

 

UDTF

    这个函数用的不是太多,暂时不详述。

 

 

 

0 0
原创粉丝点击