Hive UDF实操及解析说明

Hive类UDF工作原理

Hive自身查询语言HQL能完成大部分的功能,但遇到特殊需求时,需要自己写UDF实现。以下是一个完整的案例。


要继承org.apache.hadoop.hive.ql.exec.UDF类,实现evaluate方法
代码如下:

package cn.my.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 nationMap = new HashMap();
    static {
        nationMap.put("China", "中国");
        nationMap.put("Japan", "小日本");
        nationMap.put("USA", "美帝");
    }
    
    Text text = new Text();
    // 1000 sum(income)
    // 中国 getNation(nation)
    public Text evaluate(Text nation){
        String nation_e = nation.toString();
        String name = nationMap.get(nation_e);
        if (name == null){
        name = "火星人";
    }
    text.set(name);
    return text;
}
 nationMap = new HashMap();
    static {
        nationMap.put("China", "中国");
        nationMap.put("Japan", "小日本");
        nationMap.put("USA", "美帝");
    }
    
    Text text = new Text();
    // 1000 sum(income)
    // 中国 getNation(nation)
    public Text evaluate(Text nation){
        String nation_e = nation.toString();
        String name = nationMap.get(nation_e);
        if (name == null){
        name = "火星人";
    }
    text.set(name);
    return text;
}

自定义函数调用过程:

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

	add jar /root/NUDF.jar;add jar /root/NUDF.jar;

2.创建临时函数

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

3.调用

	select id, name, getNation(nation) from beauties;select id, name, getNation(nation) from beauties;

4.将查询结果保存到另外一张表中

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

5.使用UDF,将查询结果输出到另外一张表中

	create table result_beauties row format delimited fields terminated by '\t' as select id, getNation(nation) from beauties;create table result_beauties row format delimited fields terminated by '\t' as select id, getNation(nation) from beauties;

文章最后,给大家推荐一些受欢迎的技术博客链接

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

 


欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

 

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不埋雷的探长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值