Hive之——自定义函数
来源:互联网 发布:社会网络分析大数据 编辑:程序博客网 时间:2024/06/03 23:40
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/78308907
今天,就带着大家一起学习如何在Hive中自定义函数,得到自己想要的结果。好了,废话不多说,直接开始。
一、自定义函数流程
要想在Hive中完成自定义函数的操作,要按照如下的流程进行操作:
定义Java类并实现org.apache.hadoop.hive.ql.exec.UDF——>覆写evaluate——>将Java工程上传到Hive所在服务器(我这里是CentOS 6.5)——>启动Hadoop和Hive——>在Hive的命令行中输入add jar "你的Jar包所在路径"——>在命令行中输入"CREATE TEMPORARY FUNCTION 方法名 as 'Java完整类名(包含包名)' "来创建关联到Java类的Hive函数——>在Hive命令行中执行查询语句:select id, 方法名(name) from 表名——得出自定义函数输出的结果。
二、自定义函数实现
流程清楚了,那接下来我们就来实现Hive的自定义函数。
1、创建Java类
这里我们新建一个Java工程,并将HIVE_HOME/lib下的所有Jar包导入到Java工程的classpath下,创建Java类如下:
package com.lyz.bigdata;import org.apache.hadoop.hive.ql.exec.UDF;/** * 自定义Hive函数,需要继承org.apache.hadoop.hive.ql.exec.UDF * 并覆写evaluate方法 * @author liuyazhuang * */public class StringExt extends UDF{public String evaluate(String pnb){return "Hello " + pnb;}}这个类的实现很简单,继承了org.apache.hadoop.hive.ql.exec.UDF类,并覆写了evaluate方法,方法的实现也很简单,就是无论输入什么字符串,都在字符串的前面加上Hello
2、打包上传
这里我们将Java工程在Eclipse下打包成Jar包hiveext.jar,并上传到服务器的/usr/local/hive_data路径下,如下图所示:
3、启动Hadoop和Hive
为了方便,我这里在一个单节点上部署的Hadoop和Hive,在命令行中输入如下命令分别启动Hadoop和Hive
start-dfs.shstart-yarn.shhive前提是hadoop和hive都配置到了系统环境变量中。
4、将jar包导入到Hive的class path
在Hive命令行中输入如下命令:
add jar /usr/local/hive_data/hiveext.jar;将hiveext.jar导入Hive的class_path,如下图所示:
5、创建关联到Java类的Hive函数
在命令行数输入如下命令:
create temporary function stringext as 'com.lyz.bigdata.StringExt';如下图所示:
此时,自定义的Hive函数就关联到了Java类上。
6、运行结果
为了方便,这里我就直接用之前创建的一张表来给大家运行自定义函数的结果,首先,我们先来看没有使用自定义函数之前的结果,接下来我们再看运行了自定义函数的结果。
6.1 运行不包含自定义函数的结果:
在命令行中输入命令:
select id, name, rl, price from t_order_ext;结果如下图所示:
可以看出就是一个普通的查询语句,没有使用任何自定义函数。
6.2 运行包含自定义函数的结果
在命令行中输入命令:
select id, stringext(name),rl, price from t_order_ext;
如下图所示:
可以看出:运行包含了自定义函数的查询语句,在name字段输出的结果前面加上了Hello。
三、注意事项
按照本文的实现方式,通过如下命令:
add jar /usr/local/hive_data/hiveext.jar;create temporary function stringext as 'com.lyz.bigdata.StringExt';来创建自定义函数,一旦退出Hive,重新启动并进入Hive命令行,上述自定义的函数就会失效,要想自定义函数不失效,则需要将导出的Jar包放到HIVE_HOME/lib目录下
至此,Hive自定义函数实现完毕。
- Hive之——自定义函数
- Hive——用户自定义函数(UDF)
- Hive学习之自定义函数(UDF)
- Hive学习之自定义聚合函数
- HIVE 自定义函数之UDF/UDAF/UDTF
- Hive之UDF,UDAF自定义函数
- (大数据之hive)hive的自定义函数练习
- 自定义-Hive自定义函数
- Hive 自定义函数函数
- Hive 自定义函数函数
- Hive自定义函数的使用——useragent解析
- HIVE中的自定义函数
- hive用户自定义函数
- HIVE中的自定义函数 .
- HIVE中的自定义函数
- HIVE 自定义函数 UDF
- HIVE中的自定义函数
- hive中的自定义函数
- 值传递String
- CTF小练
- java_归并排序
- 笑出腹肌的程序猿搞笑趣图
- 开源许可证教程
- Hive之——自定义函数
- matlab的stretchlim函数
- UVALive 4886|HDU 3777|Page Count|暴力
- –定义一个圆类(Circle),其所在的包为bzu.info.software;定义一个圆柱类Cylinder,其所在的包为bzu.info.com;定义一个主类A,其所在的包也为bzu.info.
- 【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)
- R语言绘图-散点图
- 安卓常用工具类-StringUtils【String字符串工具类】
- u-boot编译与命令
- 第三次作业