UDF:作用于单行数据并输出单行数据,大多数函数都属于这一类
UDAF:作用于多行,输出一行,例如count、max
UDTA:作用于一行输出多行,例如expload
Hive UDF编写过程:
(1)继承org.apache.hadoop.hive.ql.UDF
(2)需要实现evaluate函数;evaluate函数支持重载;
(3)在hive的命令行窗口创建函数
a)添加jar
add jar linux_jar_path
b)创建function,
create [temporary] function [dbname.]function_name AS class_name;
(4)在hive的命令行窗口删除函数
Drop [temporary] function [if exists] [dbname.]function_name;
UDF开发实例:
package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public final class Lower extends UDF{
public Text evaluate(final Text s){
if (s==null) {return null;}
return new Text (s.toString().toLowerCase());
}
}