Hive入门--3.UDF编写与使用

1. 编写UDF函数


有时候hive提供的官方函数不能满足业务需求,这里hive还提供了更加灵活的解决方案:UDF(User Defined Function用户自定义函数)。下面简要介绍一下如何编写并使用用户自定义函数

需求:在查询分区字段“nation”的时候,希望把它变成对应的内容。如:查询“China”,输出的是“zhongguo”,以此类推

a) 继承org.apache.hadoop.hive.ql.exec.UDF类,实现evaluate() 方法

evaluate()函数在父类中是没有的

package cn.itcast.hive.udf;

import java.util.HashMap;
import java.util.Map;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class NationUDF extends UDF{

    public static Map<String, String> nationMap = new HashMap<String, String>();
    static{
        nationMap.put("China", "zhongguo");
        nationMap.put("Japan", "xiaoriben");
        nationMap.put("USA", "meidi");

    }

    Text t = new Text();

    //自定义函数的名称必须叫evaluate!
    public Text evaluate(Text nation){
        String nation_e = nation.toString();
        String name = nationMap.get(nation_e);
        if(name ==null){
            name = "huoxingren";
        }
        t.set(name);
        return t;
    }
}

b) 自定义函数调用过程:


1. 添加 jar 包(在hive命令行里面执行)

hive> add jar /root/NationUDF.jar;


2. 创建临时函数

hive> create temporary function getNation as 'cn.itcast.hive.udf.NationUDF';

临时函数的缺点是在下次启动hive集群时自动失效。当然,我们也可以直接创建永久函数,这样就不用担心失效的问题了,问题在于创建过程比较复杂,需要修改源码。


3. 调用

hive> select id, name,size, getNation(nation) from beauties order by size desc;

结果:
这里写图片描述

结果中产生了我们在NationUDF.java 文件中所转换的字符,说明UDF成功被hive启用。


4. 将查询结果保存到HDFS中

这种方式也就是通过SQL将查询结果插入到新建的表中

hive>   create table result 
        row format delimited fields terminated by '\t' 
        as select * from beauty order by id desc;   

创建的表文件是最终保存在HDFS上的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值