Hive UDAF开发
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);
}
}
}
- 将java文件编译成Sum_Sample.jar
- 进入hive
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;
- 需要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返回最终的聚集函数结果
转载于:https://blog.51cto.com/richiehu/386113
Hive UDAF开发相关推荐
- Hive UDAF开发详解
说明 这篇文章是来自 Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比 ...
- 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 ...
- Hive UDF开发
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. Hive的UDF开发只需要重构UDF类的evaluate函数即可.例 ...
- Hive UDF 开发手册
文档目的 笔者在工作中有接触到 Hive UDF 的开发任务,大部分 UDF 开发并不困难,困难的往往是: 不清楚 UDF 代码的编写逻辑(UDF.UDTF.UDAF) 不清楚如何传入特定类型的参数 ...
- 最强最全面的Hive SQL开发指南,超四万字全面解析!
本文整体分为两部分,第一部分是简写,如果能看懂会用,就直接从此部分查,方便快捷,如果不是很理解此SQl的用法,则查看第二部分,是详细说明,当然第二部分语句也会更全一些! 第一部分: hive模糊搜索表 ...
- Hive中分组取前N个值
分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的 ...
- Pig、Hive、MapReduce 解决分组 Top K 问题
2019独角兽企业重金招聘Python工程师标准>>> 问题: 有如下数据文件 city.txt (id, city, value) cat city.txt 1 wh 500 2 ...
- Hadoop的学习笔记(Hive|pig|zookeeper|hbase)
轉載的,此筆記的鏈接地址請點擊此處 hadoop笔记本 <div class="postText"><div id="cnblogs_post_body ...
- udf,udaf,udtf之间的区别
1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /*** @function 自定义UDF统计最小值* @author John**/publi ...
最新文章
- 所有企业要注意了,你随时可能掉进GDPR这个坑里!
- String hashCode 方法为什么选择数字31作为乘子
- caffe学习(三):caffe开发环境安装(Ubuntu)
- pdf转word网站,亲测有效
- ServiceStack.Redis之IRedisClient第三篇
- C# 中Bitmap图像处理含增强对比度的三种方法
- js数组截取前5个_想用好 Node.js?这 5 个经典国产项目值得细品
- Jquery mobile问题总汇
- 受网友U2U之托,DevComponents出品的TreeGX最新版本Patch出炉
- java base64编码的三种方式
- mysql 禁止存储过程_为什么阿里巴巴禁止使用存储过程?
- sql判断基数_SQL Server中的基数估计框架版本控制
- 在Node.js中,如何从其他文件中“包含”函数?
- hbase的region分区
- 什么是数据可视化大屏?如何制作一个数据可视化大屏?
- Python实战:利用正则表达式(requests模块)获取电影排行榜
- 那个男人他不装了,他必须硬卷!
- EI检索ISTP检索ICFMD 2011年制造与设计科学技术会议
- 电脑音频没声音,静音
- 计算机与应用在线作业答案,计算机应用基础在线作业及答案
热门文章
- mysql 126_MySQL教程126-MySQL事务隔离级别
- java mathrandom函数_java Math数学工具及Random随机函数
- 怎么调节手机的刷新率_价格均在2000元内,5G网络配高刷新率屏幕手机怎么选
- flask使用第三方云通讯平台时,出现{'172001':'网络错误'}解决方法
- 一些加快 程序运行速度的方法
- HTML基础知识(w3school)
- 转载 @html.ActionLink的几种参数格式
- 《第一行代码》学习笔记37-服务Service(4)
- windows环境 logstash file input fail 解决
- 瑞丽,边陲的旖旎风情