• Hive之UDF解释


    UDF全称:

    • user defined function 用户定义函数

    存在的意义: 

    • 比如你需要使用hive的函数来处理一些记录,像count(), sum()这都是内置的,写好的,如果我想自定义一些函数,就可以写UDF来完成,相当于在Hive的sql中自定义了一些函数
    • UDF必须使用java编写,因为Hive本身是用java编写的.

    UDF类别:

    • 普通 UDF (操作作用于单个数据的行记录,并且产生一个新的数据行记录作为输出,比如数字函数,字符串函数), (输出一条记录,输出一条记录)
    • 用户定义聚集函数 UDAF (接受多个输入的数据行,并产生一个数据行,比如count(),sum(),max()), (输入多条记录,输出一条记录)
    • 用户定义表生成函数 UDTF (操作一个数据行记录,并且产生多个数据行,多个数据行作为一个新的table作为输出)

    一个UDF必须满足两个条件:

    • 必须是org.apache.hadoop.hive.ql.exec.UDF的子类
    • 至少实现了exaluate()方法
    • 注意UDF名不区分大小写

    一个UDAF计算函数必须实现五个条件:

    • init()方法 主要负责初始化计算函数并重设它的内部状态. 在MaximumIntUDAFEvaluator中,我们把存放最终结果的IntWritable对象设置为null.我们使用null来表示目前还没有对任何值进行聚集计算,这和对空集null计算最大值应有的结果是一致的
    • iterate()方法 每次对一个新值进行聚集计算时都会调用iterate()方法.计算函数要根据聚集计算的结果更新其内部状态.iterate()接受的参数和Hive中被调用函数的参数是对应的.
    • terminatePartial()方法 Hive需要部分聚集结果时会调用terminatePartial()方法.这个方法必须返回一个封装了聚集计算当前状态的对象.
    • merge()方法 在Hive决定要合并一个部分聚集值和另一个部分聚集值时会调用merge()方法.该方法接受一个对象作为输入.这个对象的类型必须和terminatePartial()方法返回的类型一致.
    • terminate()方法 Hive需要最终聚集结果时会调用terminate()方法,计算函数需要把状态作为一个值返回.

    写一个UDF

    • 后续补充

    把写好的UDF放到Hive中去使用

    • 将用java写好的UDF函数编译后的Java类打包为一个JAR文件,并在Hive中注册这个文件
    • hive>add jar /path/test.jar;
    • hive>create temporary function strip as 'com.hadoop.hive.Strip';  //给写好的UDF中的Strip类起一个别名
    • hive>select strip("test") from table1;    //使用UDF

    暂时就写到这里,参考:

    • https://blog.csdn.net/yqlakers/article/details/70211522
  • 相关阅读:
    HDU 4734 F(x) 2013 ACM/ICPC 成都网络赛
    VC++中的头文件包含问题
    php调用com组件配置 以openoffice为例
    Android 进程和线程
    文件队列 QueueFile
    Android zip文件压缩解压缩
    Internet Explorer 11(IE11)无法切换第三方输入法
    非递归实现快速排序
    class_create()
    字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
  • 原文地址:https://www.cnblogs.com/blogyuhan/p/9298397.html
Copyright © 2020-2023  润新知