Hive之——自定义函数

转载请注明出处: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.sh
start-yarn.sh
hive
前提是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自定义函数实现完毕。


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰 河

可以吃鸡腿么?

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

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

打赏作者

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

抵扣说明:

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

余额充值