Hive 自定义函数函数

来源:互联网 发布:mac flash卸载 编辑:程序博客网 时间:2024/05/18 13:30
使用内置的函数无法完成分析任务,那么需要写自定义函数
show  functions;     //查看自带的所有的内置函数
desc function upper;  //查看具体的某个函数的用法
desc function extended upper; //带有具体案例

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

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>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.5.0</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 ‘包名.类名';
     4、使用指定函数:
     hive> show fuctions ;
     hive> select my_lower(ename) from emp ;
0 0