Hive 自定义函数函数

来源:互联网 发布:Java 优化网站 编辑:程序博客网 时间:2024/05/17 07:26

使用内置的函数无法完成分析任务,那么需要写自定义函数
show  functions;     //查看自带的所有的内置函数
desc function upper;  //查看具体的某个函数的用法
desc function extended upper; //带有具体案例




分三类
UDF  一进一出  处理原文件内容某些字段包含 []  ""  
UDAF 多进一出   sum()  avg()  max()  min()
UDTF 一进多出   手机号  -> 国家   省  市




UDF函数的开发
** 必须继承UDF类
** 必须evaluate函数  支持重载
** 必须要有返回类型,可以返回null,但是返回类型不能为void
** 建议使用Text/LongWritable


1.创建一个maven项目 
2.修改pom.xml文件
 <dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>0.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>0.13.1</version>
</dependency>


3.替换repository


4.包含hive的依赖的jar的repository 


代码实现(注意必须实现一个名为evaluate的方法)
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;


public class SalaryUDF extends UDF{
public Text evaluate(Text salaryText){
Text text = new Text();
//1.判断salaryText是否为null
if (salaryText == null) {
return null;
}
//2.判断salaryText是否可转换为一个double类型
double salary = 0;
try {
salary = Double.valueOf(salaryText.toString());
} catch (NumberFormatException e) {
e.printStackTrace();
return null;
}
if (salary > 3000) {
text.set("大于3000的一组...");
return text;
}else if (salary <= 3000 && salary > 2000) {
text.set("小于等于3000并且大于2000的一组...");
return text;
}else {
text.set("小于等于2000的一组");
return text;
}
}
}




5.编写使用UDF
1、编程
2、把程序到出为jar包放到目标机器上去:
hive> add jar /home/beifeng/jars/lower.jar ;
3、创建临时函数:
hive> CREATE TEMPORARY FUNCTION my_lower AS 'org.apache.hadoop.udf.Lower';
4、使用指定函数:
hive> show fuctions ;
hive> select my_lower(ename) from emp ;
原创粉丝点击