51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3302|回复: 0
打印 上一主题 下一主题

第一个hive UDF函数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-1-8 11:36:48 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 樱花季节 于 2013-1-8 15:58 编辑

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


第一步,在eclipse中创建一个java项目,命名为HiveUDF



第二步,导入UDF需要的jar包,hive-exec-0.8.1.jar



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包下面



重写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包的保存路径



第五步,将打好的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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-21 14:37 , Processed in 0.071748 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表