Hive进行UDAF开发,相对要比UDF复杂一些,不过也不是很难。
请看一个例子
package org.hrj.hive.udf;

import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;

public class UDAFSum_Sample extends NumericUDAF {
        public static class Evaluator implements UDAFEvaluator {
                private boolean mEmpty;
                private double mSum;
                public Evaluator() {
                        super();
                        init();
                }

public void init() {
                        mSum = 0;
                        mEmpty = true;
                }

public boolean iterate(DoubleWritable o) {
                        if (o != null) {
                                mSum += o.get();
                                mEmpty = false;
                        }
                        return true;
                }

public DoubleWritable terminatePartial() {
                        // This is SQL standard - sum of zero items should be null.
                        return mEmpty ? null : new DoubleWritable(mSum);
                }

public boolean merge(DoubleWritable o) {
                        if (o != null) {
                                mSum += o.get();
                                mEmpty = false;
                        }
                        return true;
                }

public DoubleWritable terminate() {
                        // This is SQL standard - sum of zero items should be null.
                        return mEmpty ? null : new DoubleWritable(mSum);
                }
        }
}

  1. 将java文件编译成Sum_Sample.jar
  2. 进入hive
hive> add jar Sum_sample.jar;

hive> create temporary function sum_test as 'com.hrj.hive.udf.UDAFSum_Sample';

hive> select sum_test(t.num) from t;

hive> drop temporary function sum_test;

hive> quit;

关于UDAF开发注意点:
  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返回最终的聚集函数结果

转载于:https://blog.51cto.com/richiehu/386113

Hive UDAF开发相关推荐

  1. Hive UDAF开发详解

    说明 这篇文章是来自 Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比 ...

  2. 6、HIVE JDBC开发、UDF、体系结构、Thrift服务器、Driver、元数据库Metastore、数据库连接模式、单/多用户模式、远程服务模式、Hive技术原理解析、优化等(整理的笔记)

    目录: 5 HIVE开发 5.1 Hive JDBC开发 5.2 Hive UDF 6 Hive的体系结构 6.2 Thrift服务器 6.3 Driver 6.4 元数据库Metastore 6.5 ...

  3. Hive UDF开发

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. Hive的UDF开发只需要重构UDF类的evaluate函数即可.例 ...

  4. Hive UDF 开发手册

    文档目的 笔者在工作中有接触到 Hive UDF 的开发任务,大部分 UDF 开发并不困难,困难的往往是: 不清楚 UDF 代码的编写逻辑(UDF.UDTF.UDAF) 不清楚如何传入特定类型的参数 ...

  5. 最强最全面的Hive SQL开发指南,超四万字全面解析!

    本文整体分为两部分,第一部分是简写,如果能看懂会用,就直接从此部分查,方便快捷,如果不是很理解此SQl的用法,则查看第二部分,是详细说明,当然第二部分语句也会更全一些! 第一部分: hive模糊搜索表 ...

  6. Hive中分组取前N个值

    分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的 ...

  7. Pig、Hive、MapReduce 解决分组 Top K 问题

    2019独角兽企业重金招聘Python工程师标准>>> 问题: 有如下数据文件 city.txt (id, city, value) cat city.txt  1 wh 500 2 ...

  8. Hadoop的学习笔记(Hive|pig|zookeeper|hbase)

    轉載的,此筆記的鏈接地址請點擊此處 hadoop笔记本 <div class="postText"><div id="cnblogs_post_body ...

  9. udf,udaf,udtf之间的区别

    1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /*** @function 自定义UDF统计最小值* @author John**/publi ...

最新文章

  1. 所有企业要注意了,你随时可能掉进GDPR这个坑里!
  2. String hashCode 方法为什么选择数字31作为乘子
  3. caffe学习(三):caffe开发环境安装(Ubuntu)
  4. pdf转word网站,亲测有效
  5. ServiceStack.Redis之IRedisClient第三篇
  6. C# 中Bitmap图像处理含增强对比度的三种方法
  7. js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品
  8. Jquery mobile问题总汇
  9. 受网友U2U之托,DevComponents出品的TreeGX最新版本Patch出炉
  10. java base64编码的三种方式
  11. mysql 禁止存储过程_为什么阿里巴巴禁止使用存储过程?
  12. sql判断基数_SQL Server中的基数估计框架版本控制
  13. 在Node.js中,如何从其他文件中“包含”函数?
  14. hbase的region分区
  15. 什么是数据可视化大屏?如何制作一个数据可视化大屏?
  16. Python实战:利用正则表达式(requests模块)获取电影排行榜
  17. 那个男人他不装了,他必须硬卷!
  18. EI检索ISTP检索ICFMD 2011年制造与设计科学技术会议
  19. 电脑音频没声音,静音
  20. 计算机与应用在线作业答案,计算机应用基础在线作业及答案

热门文章

  1. mysql 126_MySQL教程126-MySQL事务隔离级别
  2. java mathrandom函数_java Math数学工具及Random随机函数
  3. 怎么调节手机的刷新率_价格均在2000元内,5G网络配高刷新率屏幕手机怎么选
  4. flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法
  5. 一些加快 程序运行速度的方法
  6. HTML基础知识(w3school)
  7. 转载 @html.ActionLink的几种参数格式
  8. 《第一行代码》学习笔记37-服务Service(4)
  9. windows环境 logstash file input fail 解决
  10. 瑞丽,边陲的旖旎风情