Hive UDF自定义函数(临时和永久的区别)
Hive中虽然自带了一些函数,例如max()、avg()、sum()等,但有时候这些函数可能无法满足我们的需要,这时候就可以通过自定义UDF来进行扩展。
开发流程
UDF的开发流程基本有以下步骤:
- 继承UDF类或者GenericUDF类;
- 重写evaluate()方法并实现函数逻辑;
- 打jar包;
- 上传到hdfs;
- 使用jar创建临时或者永久函数;
- 调用函数。
UDF实现
在重写之前,我们首先建立一个Maven工程。具体的方法大家可以参考我以前的一篇文章:
Hadoop的环境变量配置及与java的交互
创建完成后,需要下载两个包:
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.2.1</version></dependency>
注意版本要和自身的一致。
我们就来实现字母的全转大写这一方法:
1、建立一个Big类,继承UDF,编写evaluate方法:
如果文档值为空,则返回空值,如果有字母,则转为其大写输出,其他类型的数值则直接返回
public class Big extends UDF {public Text evaluate(Text str) {if (str == null) {return null;}return new Text(str.toString().toUpperCase());}
}
方法写好后打jar包先放到linux上去,再上传到hdfs。
我这里创建了一个文件路径:
hdfs dfs -mkdir -p /test/hive/functions
上传文件:
hdfs dfs -put UDFexercise.jar /test/hive/functions
临时函数
首先我们创建一个临时函数:
在Hive命令行使用 add jar jar包路径,把jar包加载到临时系统中
add jar /root/UDFexercise.jar;
然后实现这一函数:
create temporary function 函数名 as '方法的全路径’
create temporary function Big as 'Test.work.Big';
注意:此时如果报错可用以下方法解决。
下载zip包
yum install -y zip
删除META_INF包:
*zip -d jar包 ‘META-INF/.SF’ ‘META-INT/.RSA’ 'META-INF/SF’
zip -d UDFexercise.jar 'META-INF/.SF' 'META-INT/.RSA' 'META-INF/*SF';
然后退出hive再重新进入,再次执行以下步骤:
add jar /root/UDFexercise.jar;
create temporary function Big as 'Test.work.Big';
即可成功
我们可以直接通过select来实现这一方法:
select Big('abc');
永久函数
前面的步骤不变,当上传到hdfs后,我们选择需要用到的数据库。
use test;
创建永久函数的指令:
create function 函数名 as ‘方法的全路径’
using jar ‘hdfs:/主机名:9000/jar包的hdfs路径’;
create function Big as 'Test.work.Big' using jar 'hdfs://hadoop01:9000/test/hive/functions/UDFexercise.jar';
创建成功后,我们就可以永久调用此函数:
select Big('abc');
我们再举个例子。在一个时间的基础上,加上小时后得出新的时间。
public class Hour extends UDF {public Text evaluate(Text times, IntWritable hours) throws ParseException {//把接收到的数据转换成java类型String str = times.toString();int i = hours.get();//日期格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//把字符串转换成Date类型Date d = sdf.parse(str);//计算时间,小时i*60分钟*60秒*1000毫秒得到新的时间,再把新的时间转成固定格式String rst = sdf.format(new Date(d.getTime() + i * 60 * 60 * 1000));return new Text(rst);}
}
打成jar包上传后,根据上述方法建立临时/永久函数:
add jar /test/UDFexercise.jar;
create temporary function time as 'Test.work.Hour';
select time('2020-09-22 12:00:00',200);
临时UDF和永久UDF的区别
1、当我们创建一个临时UDF后,如果退出系统,那么这个函数也将消失,如果想要调用,需要登录上重新创建;而永久性的UDF函数则会一直存在;
2、临时UDF可以在任意库中直接调用,不受库限制;而永久性UDF函数在如果想要再其他库调用需要在函数名前加上库名。
例如,我在test库创建了一个永久性的Big函数,那么在其他库调用的时候需要这样写
select test.Big('abc');
才能执行成功。
Hive UDF自定义函数(临时和永久的区别)相关推荐
- hive 转拼音udf_<Zhuuu_ZZ>HIVE(十二)UDF自定义函数
<Zhuuu_ZZ>HIVE(十二)UDF自定义函数 <Zhuuu_ZZ>HIVE(十二)UDF自定义函数 Hive UDF开发流程 一 创建Maven工程 二 导入依赖Jar ...
- Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 转载于:https://www.cnb ...
- Spark 2.2.1 + Hive 案例之不使用现有的Hive环境;使用现有的Hive数据仓库;UDF自定义函数
Spark 2.2.1 + Hive 案例之不使用现有的Hive环境:使用现有的Hive数据仓库:UDF自定义函数 Spark SQL支持读写存储在Apache Hive中的数据.在Spark 2.2 ...
- Hadoop生态圈-hive编写自定义函数
Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- hive中的UDF 自定义函数 : 如何创建临时/永久函数
文章目录 一.为什么要使用自定义函数 二.自定义函数的种类 三.创建自定义函数 1.创建一个maven工程(以idea为例) 2.编写方法 要求: 调用函数在输入的字符串之前添加上字符串"H ...
- hive udaf_Hive自定义函数
为什么需要自定义函数 hive的内置函数满足不了所有的业务需求. hive提供很多的模块可以自定义功能,比如:自定义函数.serde.输入输出格式等. 常见自定义函数UDF分三种: UDF(User ...
- Hive UDF 用户自定义函数-手机号掩盖(脱敏)
需求分析 能够对输入数据进行非空判断.手机号位数判断 能够实现校验手机号格式,把满足规则的进行****处理 对于不符合手机号规则的数据直接返回,不处理 Maven必须配置 <dependenci ...
- Hive之自定义函数
1.系统内置函数 (1)查看系统自带的函数 show functions; (2)显示自带的函数的用法 desc function upper; (3)详细显示自带的函数的用法 desc fun ...
- hive的自定义函数以及自定义加密函数
hive对于敏感数据的加密还不够完善,现在开发一个udf函数,自己设置密钥(hive的加密函数等级比较低,也没有集成自己加密的密钥函数,所以自己开发一个),如果要加密一些数据则可以自己使用特定的密钥进 ...
最新文章
- Flutter 28: 图解 ListView/GridView 混用时滑动冲突小尝试
- YZYZ菜鸟编程小助手
- 【原】画流程图工具visio使用技巧汇总
- 【Python基础】GitHub 星标 8.8w+,Python 小白 100 天学习计划,从新手到大师!
- 5, Data Augmentation
- python mockito arg_that_wqingxiao
- python中pip不是内部或外部命令_解决pip不是内部或外部命令
- get post put delete在vue中传参方式
- 「雕爷学编程」Arduino动手做(20)—水银开关模块
- Linux MySQL单实例源码编译安装5.6
- 编写代码注释的最佳实践
- android os自动联网,联网设置指南
- atitit.元编程总结 o99
- Wysistat与Webtrends比较
- UBT19:ubuntu安装qq与微信
- 电力网络安全监测装置_10月 长沙 电力监控系统安全防护技术研修班
- ERP管理软件哪家好?比较好的ERP管理系统软件推荐
- 阿里云服务器验证码不能显示解决办法java.lang.Error: Probable fatal error:No fonts found
- 通过镜像安装torch,torchvision
- 记第一次挖洞交洞历程
热门文章
- 如何判断生成的交易策略(EA)是好是坏?
- 中医药文化代表东方的思维方式是智慧结晶
- 异常处置规则_如何负责任地处置旧计算机
- jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要) from:jpr1990
- springboot javafx netty实现在线聊天和视屏
- 【Tracker】KCF跟踪方法百度翻译
- java仙侠回合制单机游戏_永生劫-单机仙侠回合制RPG游戏 on the App Store
- 520送女友什么礼物最好、5个适合送给情侣的礼物
- 计算机技术专业面试英语翻译,面试英文翻译:你为什么选择这个专业
- 区块链、货币和社交扩展性