package hive;
import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException;
import org.apache.hadoop.hive.ql.metadata.HiveException;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
public class MyUdf extends GenericUDF {
/**
*
* 初始化
* 校验数据类型
* @param arguments
* @return
* @throws UDFArgumentException
*/
@Override
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {
//判断输入的参数长度
if(arguments.length!=1){
throw new UDFArgumentLengthException("输入参数长度为1");
}
return PrimitiveObjectInspectorFactory.javaIntObjectInspector;
}
/**
*
* 进来条数据计算一次
* @param arguments
* @return
* @throws HiveException
*/
@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException {
if(arguments[0].get()==null){
return 0;
}
return arguments[0].get().toString().length();
}
/**
* 写执行计划
* */
@Override
public String getDisplayString(String[] children) {
return null;
}
}
代码含义:统计字符串长度
添加jar包
创建永久函数
测试