关于hive自定义函数整理

1、概述:

UDF操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。

UDF其实也可以完成iterate方法,虽然不能直接override,但是直接按照GenericUDAFEvaluator的方法名称写代码也是可以支持的。但是UDF不支持复杂类型的函数,GenericUDF可以支持如数组、列表array,map等复杂数据类型的输入输出。

UDAF 接受多个输入数据行,并产生一个输出数据行。像COUNT和MAX这样的函数就是聚集函数。

UDTF 操作作用于单个数据行,并且产生多个数据行-------一个表作为输出。

2、详细代码

类中定义
private ListObjectInspector arrayOI;
private ObjectInspector arrayElementOI;
private  ArrayList<LongWritable> result;//返回值
init方法
arrayOI = (ListObjectInspector)parameters[2];
arrayElementOI = arrayOI.getListElementObjectInspector();
return ObjectInspectorFactory.getStandardListObjectInspector(PrimitiveObjectInspectorFactory.writableLongObjectInspector);
iterate方法
Object array = parameters[2];
int arrayLength = arrayOI.getListLength(array);
Object listElement = arrayOI.getListElement(array,i);

在sql调用的时候传入的类型是数组array(*,*),后台java接收的时候得到的是ArrayList<String>

3、hive 需要配置的代码

java 项目打包,jar

cmd>pscp 路径\文件名 root@IP:/文件路径

hive>add jar *.jar

ihve>create temporary funciton name as 'class路径+类名'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值