Hive运行用户自定义函数对数据信息处理,可以试用show functions查看 hive当前支持的函数。
hive支持三种类型的UDF函数:
- 普通UDF函数:
操作单个数据行,且产生一个数据作为输出。例如(数学函数,字符串函数) - 聚合udf (UDAF)
接受多个数据行,并产生一个数据行作为输出。例如(COUNT,MAX函数等) - 表生成UDF(UDTF)
接受一个数据行,然后返回产生多个数据行(一个表作为输出)
UDF函数的处理单行单列输入的,UDAF是处理多行单列数据,UDTF函数是处理单行多列的。
UDF函数示例
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* @program: udf-function
* @description: 返回不小于输入值value的最小整数
* @author zhangchenguang
*
*/
public class CeilUDF extends UDF {
public Long evaluate(String value) {
try {
if (StringUtils.isNotBlank(value)) {
double resultDouble = Double.parseDouble(value);
Double resuleInt = Math.ceil(resultDouble);
return resuleInt.longValue();
} else {
return null;
}
} catch (Exception e) {
return null;
}
}
}
UDAF函数示例:
import org.apache.hadoop.hive.ql.exec.UDAF;
import org.apache.hadoop.hive.ql.exec.UDAFEvaluator;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
import org.apache.hadoop.hive.serde2.io.ShortWritable;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
/**
* UDAF实现加强版 MIN函数
* @author zhangchenguang
*
*/
public class MinUDF extends UDAF {
static public class MinShortEvaluator implements UDAFEvaluator {
private short mMin;
private boolean mEmpty;
public MinShortEvaluator() {
super();
init();
}
publ