Hive实现UDTF自定义函数

本文介绍了Hive中的UDTF(User-Defined Table-Generating Function),它用于处理输入一行输出多行的场景。内容包括UDTF与UDF的区别、UDTF的实现原理、如何编写和使用UDTF,以及如何通过侧视图处理多列或多行数据。通过实例展示了如何创建临时函数并调用,以及如何将一列拆分成多列或多行数据。
摘要由CSDN通过智能技术生成

上一篇说到UTD函数,今天就说下UDTF自定义函数

UDTF和UDF不同点在于,UDTF是一对多,而UDF是一对一;
UDTF(User-Defined Table-Generating Function):用户定义表生成函数,用来解决输入一行,输出多行的场景。

编写UDTF需要继承GenericUDTF类,然后重写initialize方法和process方法和close方法

方法用途
initialize方法主要是初始化返回的列和返回的列类型
process方法对输入的每一行进行操作, 他通过调用forward()返回一行或者多行数据
close方法在process方法结束后调用,用于进行一些其他的操作,只执行一次

下载依赖包到pom.xml已经说过;

创建类并继承GenericUDTF
重写initialize方法、process方法和close方法
当有一行多列时,通过调用forward()分割后有几列就返回几列数据

public class MyUdtfFun extends GenericUDTF {
   
@Override
public StructObjectInspector initialize(StructObjectInspector argOIs) throws        UDFArgumentException {
   
//设置新的列名
        ArrayList<String> columns = new ArrayList<>();
//有两列时,有几列,添加几列
        columns.add("like1");    
        columns.add("like2");
//设置每列的列类型,有几列就设置几列的列类型
        ArrayList<ObjectInspector> columnType = new ArrayList<ObjectInspector>();
        columnType.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
        columnType.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector);
return Objec
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值