zoukankan      html  css  js  c++  java
  • HIVE函数的UDF、UDAF、UDTF

    一、词义解析

      UDF(User-Defined-Function)                   一进一出

      UDAF(User- Defined Aggregation Funcation)          多进一出 (聚合函数,MR)

      UDTF(User-Defined Table-Generating Functions)          一进多出(生成多行结果)

    二、UDF

      1.注意事项

        a)自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。

        b)需要实现evaluate函。

        c)evaluate函数支持重载。

      2.代码实现

    三、UDAF

      1.注意事项

       a) 导入以下两个包:

        mport org.apache.hadoop.hive.ql.exec.UDAF

        org.apache.hadoop.hive.ql.exec.UDAFEvaluator

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

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

        1)init函数实现接口UDAFEvaluator的init函数。

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

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

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

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

      2.Mode对应的各阶段方法    

    (1)PARTIAL1 - Map阶段
    iterate()和terminatePartial()
    (2)PARTIAL2 - Map合并阶段
    merge()和terminatePartial()
    (3)FINAL - Reduce阶段
    merge()和terminate()
    (4)COMPLETE - 无Reduce阶段时执行
    iterate()和terminate()
    

      3.代码实现

      

    四、UDTF

      1.注意事项

        a)继承org.apache.hadoop.hive.ql.udf.generic.GenericUDTF。

        b)实现initialize, process, close三个方法

      2.用法

        a)直接select中使用:select explode_map(properties) as (col1,col2) from src; 

        b)和lateral view一起使用:select src.id, mytable.col1, mytable.col2 from src lateral view explode_map(properties) mytable as col1, col2;

        

  • 相关阅读:
    函数节流throttle和防抖debounce
    用RecyclerView做一个小清新的Gallery效果
    JavaScript之三
    vue介绍
    water
    吴裕雄--天生自然 R语言开发学习:基本统计分析
    吴裕雄--天生自然 R语言开发学习:基本图形(续三)
    吴裕雄--天生自然 R语言开发学习:基本图形(续二)
    吴裕雄--天生自然 R语言开发学习:基本图形(续一)
    吴裕雄--天生自然 R语言开发学习:基本图形
  • 原文地址:https://www.cnblogs.com/OnTheWay-0518/p/9692832.html
Copyright © 2011-2022 走看看