第一个hive UDF函数

这篇博客详细介绍了如何在Hive中创建并使用自定义UDF(用户定义函数)。作者通过步骤演示了从创建Java项目,继承UDF类,实现`HelloWorldUDF`,打包成jar,上传到Hive服务器,最后在Hive环境中添加和使用这个UDF的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive提供了org.apache.hadoop.hive.ql.exec.UDF类,我们可以通过继承这个类来实现不同 功能函数,在 脚本中很方便的调用它。


第一步,在eclipse中创建一个java 项目,命名为HiveUDF
1.jpg
下载 (74.84 KB)
2013-1-8 13:49



第二步,导入UDF需要的jar包,hive-exec-0.8.1.jar
2.jpg
下载 (63.46 KB)
2013-1-8 14:25



hive-exec-0.8.1.jar这个jar包可以通过这里下载:
wget http://mirror.mel.bkb.net.au/pub ... e/hive-0.8.1.tar.gz
解压lib文件夹里面就有这个jar包



第三步,新建一个类,继承UDF类,命名为HelloWorldUDF,放在com.mxm.udf包下面
4.jpg
下载 (76.97 KB)
2013-1-8 14:17



重写UDF类的evaluate方法,方法体中实现自己的逻辑
package com.mxm.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

/**
* @ClassName:  HelloWorldUDF
* @Description:    TODO  
* @Author:   xiangmin.mengxm
* @CreateDate:   2013-1-8 上午11:21:04
*/
public class HelloWorldUDF extends UDF {


public String evaluate(String name){

return "hello world," + name;

}

}



第四步,将这个java文件打包成java jar,eclipse中选择该文件点击右键选择"export",选择好jar包的保存路径
5.jpg
下载 (68.48 KB)
2013-1-8 14:17



第五步,将打好的jar包上传到hive server
-bash-3.2$ scp dwapp@10.20.151.57:/export/home/dwapp/mxm/python/HelloWorldUDF.jar  .


此时自定义UDF函数就完成了,下面需要把它加入到hive的环境中去
第六步,进入自己的hive环境,输入命令add jar HelloWorldUDF.jar
hive> add jar HelloWorldUDF.jar;
Added HelloWorldUDF.jar to class path
Added resource: HelloWorldUDF.jar


第七步,创建一个临时函数,名称自定义(给自定义的UDF取个名),as后面是jar包保存的类的名称
hive> create temporary function helloworld as 'com.mxm.udf.HelloWorldUDF';
OK
Time taken: 0.0060 seconds


第八步,使用这个函数
hive> select helloworld(name) from mxm_ test2012102401;
Automatically selecting local only mode for query
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Execution log at: /tmp/dwdev/dwdev_20130108113535_2e4312fc-1571-4735-ac29-8fb5297bbd9e.log
Job running in-process (local Hadoop)
Hadoop job information for null: number of mappers: 0; number of reducers: 0
2013-01-08 11:35:58,069 null map = 0%,  reduce = 0%
2013-01-08 11:36:00,074 null map = 100%,  reduce = 0%
Ended Job = job_local_0001
2013-01-08 11:36:01     End of local task; Time Taken: 9.176 sec.
OK
hello world,mengxm
Time taken: 20.689 seconds

可以看到,通过hellworld这个函数,我成功的给select出来的name加上了helloworld

mxm_test2012102401表的建表脚本以及load 数据脚本如下:
hive> create table mxm_test2012102401 (id int, name string) row format delimited fields terminated by ',' stored as textfile;
OK
Time taken: 0.143 seconds
hive> load data local inpath '/home/dwdev/mxm/a.txt' into table mxm_test2012102401;
Copying data from file:/home/dwdev/mxm/a.txt

a.txt如下:
-bash-3.2$ cat a.txt
1,mengxm


删除helloworld函数
hive> drop temporary function helloworld;
OK
Time taken: 0.0040 seconds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值