当前位置:   article > 正文

Hive UDF实操及解析说明_org.apache.hadoop.hive.ql.exec.udf

org.apache.hadoop.hive.ql.exec.udf

Hive类UDF工作原理

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


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

  1. package cn.my.hive.udf;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.apache.hadoop.hive.ql.exec.UDF;
  5. import org.apache.hadoop.io.Text;
  6. public class NationUDF extends UDF{
  7. public static Map nationMap = new HashMap();
  8. static {
  9. nationMap.put("China", "中国");
  10. nationMap.put("Japan", "小日本");
  11. nationMap.put("USA", "美帝");
  12. }
  13. Text text = new Text();
  14. // 1000 sum(income)
  15. // 中国 getNation(nation)
  16. public Text evaluate(Text nation){
  17. String nation_e = nation.toString();
  18. String name = nationMap.get(nation_e);
  19. if (name == null){
  20. name = "火星人";
  21. }
  22. text.set(name);
  23. return text;
  24. }
  25. nationMap = new HashMap();
  26. static {
  27. nationMap.put("China", "中国");
  28. nationMap.put("Japan", "小日本");
  29. nationMap.put("USA", "美帝");
  30. }
  31. Text text = new Text();
  32. // 1000 sum(income)
  33. // 中国 getNation(nation)
  34. public Text evaluate(Text nation){
  35. String nation_e = nation.toString();
  36. String name = nationMap.get(nation_e);
  37. if (name == null){
  38. name = "火星人";
  39. }
  40. text.set(name);
  41. return text;
  42. }

自定义函数调用过程:

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点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/833658
推荐阅读
相关标签
  

闽ICP备14008679号