其实,我是个演员!

hive udf 使用方法

大数据 keguang 113℃ 0评论

hive作为一个sql查询引擎,自带了一些基本的函数,比如count(计数),sum(求和),有时候这些基本函数满足不了我们的需求,这时候就要写hive hdf(user defined funation),又叫用户自定义函数,应用与select 语句中。

哪些情况满足不了我们的需求呢,比如:

  • 需要将字段与数据库中查询一下,做个比对;
  • 需要对数据进行复杂处理;
  • 等等
  • hive udf 用法

    下面是一个判断hive表字段是否包含’100’的简单udf:

    使用maven将其打包,进入hive cli,输入命令:

    创建完临时函数,即可使用这个函数了:

    hive udf 创建与使用步骤

    1. 继承org.apache.hadoop.hive.ql.exec.UDF类,实现evaluate方法;

    2. 打包上传到集群,通过create temporary function创建临时函数,不加temporary就创建了一个永久函数;

    3. 通过select 语句使用;

    下面是一个例子,通过读取mysql数据库中的规则,为hive中的workflow返回对应的,类型:

    我们希望,将hive的某一个字段取值为,1,2的变为a,取值为11,22,33的全部变为b,就是归类的意思。
    这个udf可以这么实现:

    查看hive function的用法:
    查month 相关的函数

    查看 add_months 函数的用法

    查看 add_months 函数的详细说明并举例

    hive 中的 UDAF

    可以看出,udf就是一个输入一个输出,输入一个性别,返回’男’或者’女’,如果我们想实现select date,count(1) from table,统计每天的流量呢?这就是一个分组统计,显然是多个输入,一个输出,这时候udf已经不能满足我们的需要,就需要写udaf,user defined aggregare function(用户自定义聚合函数)。

    这里写一个字符串连接函数,相当于concat的功能,将多行输入,合并为一个字符串:

    用法,与udf一样,还是需要打包并且到hive cli中注册使用。

    关于UDAF开发注意点:

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

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

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

  • init函数类似于构造函数,用于UDAF的初始化
  • iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean
  • terminatePartial无参数,其为iterate函数轮转结束后,返回乱转数据,iterate和terminatePartial类似于hadoop的Combiner
  • merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
  • terminate返回最终的聚集函数结果
  • 转载请注明:不负此生 » hive udf 使用方法

    喜欢 (2)or分享 (0)
    头像
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址