博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop_UDTF示例
阅读量:4977 次
发布时间:2019-06-12

本文共 2588 字,大约阅读时间需要 8 分钟。

UDTF: 一进多出

UDTF(User-Defined Table-Generating Function)支持一个输入多个输出,一般用于解析工作,比如说解析url,然后获取url中的信息编码:继承GenericUDTF,实现方法:initializa(返回返回值的参数类型)、process具体的处理方法,   一般在这个方法中会调用父类的forward方法进行数据的写出、最终调用close方法和MR程序中的cleanUp关闭资源

简单示例,将一列数据分成两列输出,name--> name,name+email

package com.hive.udtf;import java.util.ArrayList;import org.apache.hadoop.hive.ql.exec.UDFArgumentException;import org.apache.hadoop.hive.ql.metadata.HiveException;import org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector;import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;public class myudtf extends GenericUDTF{	  @Override  public StructObjectInspector initialize(StructObjectInspector argOIs) throws UDFArgumentException {		    if(argOIs.getAllStructFieldRefs().size() != 1){      throw new UDFArgumentException("Argument Only one");    }		    ArrayList
fieldname = new ArrayList
();      fieldname.add("name");      fieldname.add("email");      ArrayList
fieldoi = new ArrayList
();      fieldoi.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);      fieldoi.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);      return ObjectInspectorFactory.getStandardStructObjectInspector(fieldname, fieldoi);    }    @Override    public void process(Object[] args) throws HiveException {       if(args.length == 1){        String name = args[0].toString();        String email = name+"@foxmail.com";        super.forward(new String[]{name,email});      }    }    @Override    public void close() throws HiveException {       super.forward(new String[] {"complete","finish"});    }}

 测试

hive (workdb)> add jar /home/liuwl/opt/datas/myudtf.jar;  hive (workdb)> create temporary function myudtf as 'com.hive.udtf.myudtf';hive (workdb)> select myudtf(ename) as (name,email) from emp;结果: name   email    SMITH  SMITH@foxmail.com    ALLEN  ALLEN@foxmail.com    WARD   WARD@foxmail.com    JONES  JONES@foxmail.com    MARTIN  MARTIN@foxmail.com    BLAKE  BLAKE@foxmail.com    CLARK  CLARK@foxmail.com    SCOTT  SCOTT@foxmail.com    KING   KING@foxmail.com    TURNER  TURNER@foxmail.com    ADAMS  ADAMS@foxmail.com    JAMES  JAMES@foxmail.com    FORD   FORD@foxmail.com    MILLER  MILLER@foxmail.com    complete	finish

转载于:https://www.cnblogs.com/eRrsr/p/6097034.html

你可能感兴趣的文章
货币系统
查看>>
算法和数据结构---排序---优先级队列
查看>>
VS 统计代码行数
查看>>
html----怎样实现元素的垂直居中
查看>>
张照行 的第七次作业
查看>>
实验七
查看>>
Js_图片切换左右点击
查看>>
索引调优
查看>>
SSL-ZYC POJ 2560 Freckles
查看>>
vue项目整理
查看>>
【链表】Sort List(归并排序)
查看>>
multiprocess模块
查看>>
TextBox获得焦点,选中文本
查看>>
洛谷P2704 炮兵阵地
查看>>
POJ 1459 Power Network(最大流入门)
查看>>
UVA1204 Fun Game
查看>>
libpointmatcher的filter
查看>>
(线段树) Count the Colors --ZOJ --1610
查看>>
recvmsg和sendmsg函数
查看>>
深度图像检测算法总结与对比(4)
查看>>