Hive - 大致描述自定义函数 UDF、UDAF、UDTF

111 阅读1分钟

UDF

继承GenericUDF类,重写initialize,evaluate方法,init方法是对输入参数进行合法化验证,并对输出数据的类型进行定义,evaluate函数中主要是实现核心的逻辑。

一进一出的方式

UDAF

继承顶层类AbstractGenericUDAFResolver类,重写getEvaluator方法,创建内部类继承GenericUDAFEvaluator,然后主要重写init方法,iterate方法,terminatePartial方法,merge方法,terminate等方法,实现过程比较复杂,因为涉及到多个分区的数据合并,所以可以分为map,combiner,reducer阶段,每个阶段都需要执行init,在init方法中根据mode参数判断当前阶段,然后根据不同的阶段在init中进行输出数据类型的定义。 概括起来就是先计算每个分区上的数据,得到结果,然后对各个分区的结果进行计算,得到最终的结果。

多进一出,类似的函数有sum(),count()等

UDTF

继承GenericUDTF类,重写initialize,process函数,initialize方法是作用是判断参数的合法性和定义输出结果的类型,process内部实现核心的逻辑,因为是将一个参数变成多个结果输出,那么内部输出的每一个结果都会使用forward函数将结果传递出去。

一进多出,类似explode()函数等