大数据学习路线_好程序员大数据学习路线分享UDF函数
好程序员大数据学习路线分享UDF函数
1.为什么需要UDF?
1)、因为内部函数没法满足需求。
2)、hive它本身就是一个灵活框架,允许用自定义模块功能,如可以自定义UDF、serde、输入输出等。
2.UDF是什么?
UDF:user difine function,用户自定义函数,一对一。常用 udaf:user define aggregate function,用户自定义聚合函数,多对一。 udtf:user define table_generate function,用户自定义表生成函数,一对多。
3.怎么编写UDF函数??
1)、该类需要继承UDF,重写evaluate(),允许该方法重载。
2)、也可以继承 generic UDF,需要重写 initliaze() 、 getDisplay() 、 evaluate()
4.UDF的使用
第一种:(当前session有效)
package edu.qianfeng.UDF;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
* 使用Java 自定义UDF
* @author lyd
*
*1603 1603_class
*/
public class FirstUDF extends UDF{
//重写evaluate()
public String evaluate(String str){
//判断
if(str == null){
return null;
}
return str+"_class";
}
}
1、添加自定UDF的jar包
hive>add jar /home/h2h.jar;
2、创建临时函数
hive>create temporary function myfunc as "edu.qianfeng.UDF.FirstUDF";
3、测试是否添加好:
show functions;
select myfunc("1603");
4、确定无用时可以删除:
drop temporary function myfunc;
第二种:(当前session有效)
package edu.qianfeng.UDF;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.json.JSONException;
import org.json.JSONObject;
public class KeyToValue extends UDF{
public String evaluate(String str,String key){
if(str == null || key == null){
return null;
}
//sex=1&hight=180&weight=130&sal=28000
//{sex:}
String str1 = str.replace("=