[转]HIVE UDF/UDAF/UDTF的Map Reduce代码框架模板
FROM : http://hugh-wangp.iteye.com/blog/1472371
自己写代码时候的利用到的模板
1.必须继承org.apache.hadoop.hive.ql.exec.UDF2.必须实现evaluate函数,evaluate函数支持重载
- <span style="font-size: x-small;">package com.alibaba.hive.udf;
- import org.apache.hadoop.hive.ql.exec.UDF
- public class helloword extends UDF{
- public String evaluate(){
- return "hello world!";
- }
- public String evaluate(String str){
- return "hello world: " + str;
- }
- }</span>
UDAF步骤:
1.必须继承org.apache.hadoop.hive.ql.exec.UDAF(函数类继承)org.apache.hadoop.hive.ql.exec.UDAFEvaluator(内部类Evaluator实现UDAFEvaluator接口)2.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数init():类似于构造函数,用于UDAF的初始化iterate():接收传入的参数,并进行内部的轮转。其返回类型为booleanterminatePartial():无参数,其为iterate函数轮转结束后,返回乱转数据,iterate和terminatePartial类似于hadoop的Combiner(iterate--mapper;terminatePartial--reducer)merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为booleanterminate():返回最终的聚集函数结果
- <span style="font-size: x-small;">package com.alibaba.hive;
- import org.apache.hadoop.hive.ql.exec.UDAF;
- import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
- public class myAVG extends UDAF{
- public static class avgScore{
- private long pSum;
- private double pCount;
- }
- public static class AvgEvaluator extends UDAFEvaluator{
- avgScore score;
- public AvgEvaluator(){
- score = new avgScore();
- init();
- }
- /*
- *init函数类似于构造函数,用于UDAF的初始化
- */
- public void init(){
- score.pSum = 0;
- score.pCount = 0;
- }
- /*
- *iterate接收传入的参数,并进行内部的轮转。其返回类型为boolean
- *类似Combiner中的mapper
- */
- public boolean iterate(Double in){
- if(in != null){
- score.pSum += in;
- score.pCount ++;
- }
- return true;
- }
- /*
- *terminatePartial无参数,其为iterate函数轮转结束后,返回轮转数据
- *类似Combiner中的reducer
- */
- public avgScore terminatePartial(){
- return score.pCount == 0 ? null : score;
- }
- /*
- *merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
- */
- public boolean merge(avgScore in){
- if(in != null){
- score.pSum += in.pSum;
- score.pCount += in.pCount;
- }
- return true;
- }
- /*
- *terminate返回最终的聚集函数结果
- */
- public Double terminate(){
- return score.pCount == 0 ? null : Double.valueof(score.pSum/score.pCount);
- }
- }
- }</span>
UDTF步骤:
2.实现initialize, process, close三个方法
3.UDTF首先会
a.调用initialize方法,此方法返回UDTF的返回行的信息(返回个数,类型)
b.初始化完成后,会调用process方法,对传入的参数进行处理,可以通过forword()方法把结果返回
c.最后close()方法调用,对需要清理的方法进行清理
- <span style="font-size: x-small;"><span style="font-size: xx-small;">public class GenericUDTFExplode extends GenericUDTF {
- private ListObjectInspector listOI = null;
- @Override
- public void close() throws HiveException {
- }
- @Override
- public StructObjectInspector initialize(ObjectInspector[] args) throws UDFArgumentException {
- if (args.length != 1) {
- throw new UDFArgumentException("explode() takes only one argument");
- }
- if (args[0].getCategory() != ObjectInspector.Category.LIST) {
- throw new UDFArgumentException("explode() takes an array as a parameter");
- }
- listOI = (ListObjectInspector) args[0];
- ArrayList<String> fieldNames = new ArrayList<String>();
- ArrayList<ObjectInspector> fieldOIs = new ArrayList<ObjectInspector>();
- fieldNames.add("col");
- fieldOIs.add(listOI.getListElementObjectInspector());
- return ObjectInspectorFactory.getStandardStructObjectInspector(fieldNames,
- fieldOIs);
- }
- private final Object[] forwardObj = new Object[1];
- @Override
- public void process(Object[] o) throws HiveException {
- List<?> list = listOI.getList(o[0]);
- if(list == null) {
- return;
- }
- for (Object r : list) {
- forwardObj[0] = r;
- forward(forwardObj);
- }
- }
- @Override
- public String toString() {
- return "explode";
- }
- }</span></span>
[转]HIVE UDF/UDAF/UDTF的Map Reduce代码框架模板的更多相关文章
- 【转】HIVE UDF UDAF UDTF 区别 使用
原博文出自于:http://blog.csdn.net/longzilong216/article/details/23921235(暂时) 感谢! 自己写代码时候的利用到的模板 UDF步骤: 1 ...
- hive中 udf,udaf,udtf
1.hive中基本操作: DDL,DML 2.hive中函数 User-Defined Functions : UDF(用户自定义函数,简称JDF函数)UDF: 一进一出 upper lower ...
- Hive 自定义函数 UDF UDAF UDTF
1.UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /** * @function 自定义UDF统计最小值 * @author John * */ ...
- 简述UDF/UDAF/UDTF是什么,各自解决问题及应用场景
UDF User-Defined-Function 自定义函数 .一进一出: 背景 系统内置函数无法解决实际的业务问题,需要开发者自己编写函数实现自身的业务实现诉求. 应用场景非常多,面临的业务不同导 ...
- Hive UDF 实验1
项目中使用的hive版本低于0.11,无法使用hive在0.11中新加的开窗分析函数. 在项目中需要使用到row_number()函数的地方,有人写了udf来实现这个功能. new java proj ...
- UDF/UDAF开发总结
参考文章: https://www.cnblogs.com/itxuexiwang/p/6264547.html https://www.cnblogs.com/eRrsr/p/6096989.htm ...
- HIVE UDF
基本函数 SHOW FUNCTIONS; DESCRIBE FUNCTION <function_name>; 日期函数 返回值类型 名称 描述 string from_unixtime( ...
- Hive UDF,就这
摘要:Hive UDF是什么?有什么用?怎么用?什么原理?本文从UDF使用入手,简要介绍相关源码,UDF从零开始. 本文分享自华为云社区<Hive UDF,就这>,作者:汤忒撒. Hive ...
- Hive自定义UDAF详解
遇到一个Hive需求:有A.B.C三列,按A列进行聚合,求出C列聚合后的最小值和最大值各自对应的B列值.这个需求用hql和内建函数也可完成,但是比较繁琐,会解析成几个MR进行执行,如果自定义UDAF便 ...
随机推荐
- 【LOJ】#2268. 「SDOI2017」苹果树
题解 显然权值都是正的,我们最深的那个点一定延伸到了某个叶子 我们抛去这条链之外再选K个点即可 如果直接对一棵树选K个点,满足这样的依赖关系,可以通过一个后序遍历的顺序做出来 转移方法是 \(dp[i ...
- Vue之双向绑定原理动手记
Vue.js的核心功能有两个:一是响应式的数据绑定系统,二是组件系统.本文是通过学习他人的文章,从而理解了双向绑定原理,从而在自己理解的基础上,自己动手实现数据的双向绑定. 目前几种主流的mvc(vm ...
- 设计模式-装饰者模式(Decorator Pattern)
本文由@呆代待殆原创,转载请注明出处. 此设计模式遵循的设计原则之一:类应该支持扩展,而拒绝修改(Open-Closed Principle) 装饰者模式简述 装饰者模式通过组合的方式扩展对象的特性, ...
- 【WIN10】WIN2D——圖層
先看效果: 效果還是不錯滴. 這功能就有點像PS的圖層和蒙板了. 簡單的添加一個層: private void draw_mb(CanvasControl sender, CanvasDrawingS ...
- KVM源代码解读:linux-3.17.4\arch\x86\include\asm\kvm_host.h
/* * Kernel-based Virtual Machine driver for Linux * * This header defines architecture specific int ...
- 20172308《Java软件结构与数据结构》第一周学习总结
教材学习内容总结 第 1 章 概述 软件质量的特征:正确性.可靠性.健壮性.可用性.可维护性.可重用性(别人写的组件自己可以拿过来用).可移植性.运行效率 数据结构:计算机存储.组织数据的方式 程序 ...
- UVALive 6909 Kevin's Problem 数学排列组合
Kevin's Problem 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid ...
- ARM JTAG 信号 RTCK 应该如何处理?
用户在调试内嵌可综合内核的 CPU 如 ARM7TDMI-S 时,需要通过打开仿真器的自适应时钟功能. 此时,ARM仿真器根据 RTCK 时钟信号的频率,产生可用于 CPU 内核当前时钟主频的最快的 ...
- 树莓派创始人访谈:我们是怎么让大家都成为DIY黑客的
原文出处: Linux.CN 请记住它是为喜欢折腾的人准备的只要35美元的计算机 我永远不会忘记我第一次看到树莓派的情形.那个小巧的,信用卡大小的计算机,性能却足够强劲,可以作为一般家用PC,媒体中心 ...
- 一个例子来看C#泛型是如何登场的
有这样一个有关汽车的类. public class Car { public int ID { get; set; } public string Make { get; set; } } 现在,在客 ...