hive自定义函数UDF的使用方法
虽然Hive已经提供了很多内置的函数,比如count()、sum(),但是还是不能满足用户的需求,因此提供了自定义函数供用户自己开发函数来满足自己的需求。本实例通过编写自己的UDF,实现通过一个人的出生日期,计算其所属的星座。
一、自定义函数分类
UDF(User-Defined-Function)用户自定义函数,输入一个数据然后产生一个数据;
UDAF(User-Defined Aggregation Function)用户自定义聚合函数,多个输入数据然后产生一个输出参数;
UDTF(User-Defined Table-generating Function)用户自定义表生成函数,输入一行数据生成N行数据
二、自定义函数流程
要想在Hive中完成自定义函数的操作,要按照如下的流程进行操作:
1、自定义Java类并继承org.apache.hadoop.hive.ql.exec.UDF;
2、覆写evaluate函数,evaluate函数支持重载;
3、把程序打包放到hive所在服务器;
4、进入hive客户端,添加jar包;
5、创建关联到Java类的Hive函数;
6、Hive命令行中执行查询语句:select id, 方法名(name) from 表名——得出自定义函数输出的结果。
三、自定义函数实现
1、创建java类
新建java工程,导入项目依赖包hive-exec-x.x.x.jar,创建类UDFDemo如下:
package cn.hust.book.bigdata;
import java.text.SimpleDateFormat;
import java.util.Calendar;import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;@Description(name="UDFDemo", value="_FUNC_(date)-from the input date string"+"or separate month and day arguments,returns the sign of the UDFDemo",
extended ="Example :\n"+"> SELECT _FUNC_(data_string) from src;\n"+ ">SELECT _FUNC_(mouth,day0) FORM src;")public class UDFDemo extends UDF {private SimpleDateFormat df;public UDFDemo(){df= new SimpleDateFormat("yyyy-MM-dd");}public String evaluate(String date_str) throws Exception{int month;int day;try{java.util.Date bday = df.parse(date_str);Calendar cal = Calendar.getInstance();cal.setTime(bday);month = cal.get(Calendar.MONTH)+1;day = cal.get(Calendar.DAY_OF_MONTH);}catch (Exception e) {return null;}if(month==1){if(day<20){return "魔蝎座";}else{return "水瓶座";}}if(month==2){if(day<19){return "水瓶座";}else{return "双鱼座";}}if(month==3){if(day<21){return "双鱼座";}else{return "白羊座";}}if(month==4){if(day<20){return "白羊座";}else{return "金牛座";}}if(month==5){if(day<21){return "金牛座";}else{return "双子座";}}if(month==6){if(day<22){return "双子座";}else{return "巨蟹座";}}if(month==7){if(day<23){return "巨蟹座";}else{return "狮子座";}}if(month==8){if(day<23){return "狮子座";}else{return "处女座";}}if(month==9){if(day<23){return "处女座";}else{return "天秤座";}}if(month==10){if(day<24){return "天秤座";}else{return "天蝎座";}}if(month==11){if(day<23){return "天蝎座";}else{return "射手座";}}if(month==12){if(day<22){return "射手座";}else{return "摩羯座";}}return null;}/** 测试*/public static void main(String[] args) throws Exception{UDFDemo demo =new UDFDemo();String date_str = "2009-04-15";System.out.println("result:"+demo.evaluate(date_str));}}
编写一个UDF,关键在于自定义Java类需要继承UDF类并实现evaluate()函数。因为在hive客户端执行查询时,查询中每处应用到这个函数的地方都会对这个类进行实例化。对于每行输入都会调用evaluate()函数,evaluate()函数处理后的值会返回给hive。
2、项目打包
将项目在eclipes中打包为jar包并命名为HiveUDF.jar,打包后上传到服务器指定目录,此处我们选择/home/hadoop/workspace/dhp/HiveUDF目录,如图所示:
3、加载样本数据集
进入到hive客户端,创建数据表:
CREATE TABLE IF NOT EXISTS userinfo(
name STRING , //姓名
bday STRING , //出生日期
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
将样本数据集加载到userinfo表中:
hive> LOAD DATA LOCAL INPATH '样本数据集地址' > INTO TABLE userinfo;
我们的样本数据集内容如下(地址:/home/hadoop/workspace/dhp/HiveUDF/person.txt):
4、添加jar包
在hive客户端,将HiveUDF.jar文件加载到类路径:
hive> add jar /home/hadoop/workspace/dhp/HiveUDF/HiveUDF.jar
5、创建关联到Java类的hive函数
通过CREATE FUNCTION语句定义好使用这个java类的函数:
hive> CREATE TEMPORARY FUNCTION HiveUDF> AS 'cn.hust.book.bigdata.UDFDemo'; //cn.hust.book.bigdata.UDFDemo对应java程序包名+类名
6、执行查询
到目前为止,这个判断星座的UDF可以像其他函数一样使用了,首先,我们看一下HiveUDF()函数的描述:
hive> DESCRIBE FUNCTION HiveUDF;
hive> SELECT name,bday,HiveUDF(bday) from userinfo;
当我们使用完自定义UDF后,可通过如下命令删除此函数:
hive> DROP TEMPORARY FUNCTION HiveUDF;
最后,附上源码+依赖包+HiveUDF.jar下载地址:
链接:https://pan.baidu.com/s/17BrNv5HciFL9GW3QmY4fIA
密码:xeal
hive自定义函数UDF的使用方法相关推荐
- Hive 自定义函数UDF入门
1.为什么要用自定义函数 1.1 hive的内置函数满足不了的业务需求,这时候就需要使用自定义函数 1.2 hive的自定义函数有那些 1.UDF 一对一输出输入(本章使用) 2.UDTF 一对多输 ...
- Hive自定义函数UDF、UDAF、UDTF
0.依赖 <dependencies><!--添加hive依赖--><dependency><groupId>org.apache.hive</g ...
- Hive内置运算函数,自定义函数(UDF)和Transform
4.Hive函数 4.1 内置运算符 内容较多,见<Hive官方文档> 4.2 内置函数 内容较多,见<Hive官方文档> https://cwiki.apache.org ...
- hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...
如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...
- Hive 自定义函数编写(UDF,UDAF,UDTF)
Hive自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义 UDF来方便的扩展. 当 Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. 1. ...
- 2021年大数据Hive(八):Hive自定义函数
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive自定义函数 一.概述 1.UDF(User-Define ...
- Hive自定义函数入门实例
概念 UDF函数一共分为三种类型: UDF-一进一出,给定一个参数,输出一个处理后的数据 UDAF-多进一出,属于聚合函数,类似于count.sum等函数 UDTF-一进多出,属于一个参数,返 ...
- Hive 史上最全面的大数据学习第九篇(五) Hive 自定义函数 每一天都是美好的一天!
Hive概述 & 安装方式详解 Hive表操作 Hive表分类 Hive Sql 操作 Hive 自定义函数 Hive On HBase 六.Hive 自定义函数 在Hive当中又系统自带的函 ...
- hive自定义函数-身份证号合法性判断
hive自定义函数-身份证号合法性判断 简要 代码 简要 身份证号合法性判断: 若为18位身份证号: 1.第18位数字,应该在身份证号最后一位校验位数字中 2.前17为数字分别乘以对应的加权因子,累加 ...
最新文章
- 为什么华为在发布会不提鸿蒙,华为又要开发布会?这次没有手机,鸿蒙系统要当主角!...
- orika java_Orika JavaBean映射工具探秘
- Three.js中使用requestAnimationFrame方法实现立方体转动和小球跳动的动画
- IIS 8.5配置.net网站[花了半个多小时]
- WinSock I/O 模型 -- WSAEventSelect 模型
- poj2104 k-th number 主席树入门讲解
- MySQL服务器的启动与停止
- 极限学习机ELM回归预测及其MATLAB代码实现
- smartforms 双面打印 设置
- T1-商贸宝,提取暂存单据提示没有权限
- PSM+DID 效果评估python demo 、线性分类模型+双重差分法
- 前后落差大用什么词语_形容前后反差大的词语
- 华硕飞行堡垒7按Fn+F5电脑显示屏不显示风扇模式
- JavaScript?静下心来的研究之路
- SPU、SKU、SKC、ARPU是什么
- python开源库——h5py快速指南
- Android TV Demo 工程,其中包含 TV 常用的自定义控件,飞框效果实现,外边框效果实现,UI 控件焦点自动处理,使 TV 开发更简单,更高效。
- OSChina 周四乱弹 —— 剁手过双十一
- 基于Navicat管理工具实现以客户为导向的数据库基本操作
- 阿里P7晒工资条,看完真的扎心了……
热门文章
- wps如何设置文字底纹
- Spring 容器到底是个什么
- Jet8让社交媒体互动转化盈利机制成为可能
- 值得入手的投影仪,好的家用投影仪如何选择?
- C/C++投骰子游戏
- java 后端如何处理数据库字段类型为Json格式的方法
- 跟李沐学AI part3
- B05 - 033、元数据信息FSimage以及edits和secondaryNN的作用
- 努比亚手机浏览器 安全证书失效_「前沿」小米10安卓11尝鲜版来了 | 倪飞出任中兴手机总经理...
- Uni-app 手机号+验证码登录 用户名密码登录登出