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文件
<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 ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值