zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    国内高通量基因测序公司成立 时间表
    递推法(归纳法)
    1. 基础知识 (直方图 柱状图 正态分布 模型 抽样分布 )
    1. 基础概念 (统计分布 抽样 置信区间 标准差)
    史上最全 | 39个RNAseq分析工具与对比
    转录组分析工具大比拼 (完整翻译版)
    C#、.NET Framework、CLR的关系
    C#程序集及程序集概念介绍
    SSM处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题
    mybatis字符#与字符$的区别
  • 原文地址:https://www.cnblogs.com/blogyuhan/p/9298397.html
Copyright © 2011-2022 走看看