实现UDTF的步骤:
-- 解析如上内容:
1. 自定义UDTF函数,继承于抽象类GenericUDTF;
2. 实现initialize, process,close 的三个方法;
3. 三个方法的作用说明:
1. 'initialize()':
a、规定形参的参数类型:Hive调用initialize()方法,来告诉UDTF函数接收参数的类型,然后在这个方法中就可以对参数的
类型进行校验,参数类型包括个数、数据类型等等
b、规定函数返回结果数据类型:返回initialize()方法必须返回一个与UDTF将生成的行对象对应的对象检查器
2. 'process()':
a、调用时机:initialize()被调用以后,即对输入的数据进行了检查满足条件以后,执行这个方法
b、作用:一行数据调用一次process方法,process方法的内部,会遍历这一行数据,如果是数组,那就遍历数组,遍历以后的
一个元素,调用一次forward()方法,对数据进行输出。
3. 'close()':
a、调用时机:当hive中的所有行都通过了UDTF函数以后,则Hive会调用这个close方法
b、作用:关闭资源。
2.实现自定义UDF函数步骤
1)写一个类继承(org.apache.hadoop.hive.ql.)UDF类;
2)重写evaluate()方法;
3)打JAR包;
4)添加JAR到Hive的类路径:
hive> add jar /home/ubuntu/ToDate.jar;
5)注册函数:
hive> create temporary function xxx as ‘XXX’;
6)使用函数;
UDF(一进一出) UDAF(多进一出) UDAF(一进多出)
简单的数据类型(比如String、Integer)继承UDF
复杂的数据类型(比如Array、Map、Struct)继承GenericUDF,需要重写initialize、evaluate、 getDisplayString方法
3.实现自定义函数UDAF步骤:
引入如下两下类
import org.apache.hadoop.hive.ql.exec.UDAF
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator
函数类需要继承UDAF类,计算类Evaluator实现UDAFEvaluator接口
Evaluator需要实现UDAFEvaluator的init、iterate、terminatePartial、merge、terminate 这几个函数。
a)init函数实现接口UDAFEvaluator的init函数。
b)iterate接收传入的参数,并进行内部的迭代。其返回类型为boolean。
c)terminatePartial无参数,其为iterate函数遍历结束后,返回遍历得到的数据,terminatePartial类似于 hadoop的Combiner。
d)merge接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean。
e)terminate返回最终的聚集函数结果。
f)将文件打包
g)创建临时函数