Hive 自定义函数函数

使用内置的函数无法完成分析任务,那么需要写自定义函数
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文件
     org.apache.hive
     hive-jdbc
     0.13.1
     org.apache.hive
     hive-exec
     0.13.1

< 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 ;

你可能感兴趣的:(hive)