#hive#HIVE中使用python实现UDF

HIVE中使用python实现UDF

HIVE,FACEBOOK的一个开源项目,利用类SQL的语句(HiveQL)来加快一般的MapReduce的开发过程。

UDF,user defined function, 因为HIVE毕竟不是一般的关系型数据库,支持的HQL有限,如果要实现复杂的功能,就要通过自己定义函数来帮助实现。

HIVE应该利用PIPE的原理,将自己查询的结果放到python脚本的stdin中。所以他的查询结果不会显示在terminal中,terminal中显示的结果是python的执行结果。

使用HIVE的命令进入数据仓库(search)

1
use search;

使用HIVE的命令查看已经建立的表

1
show tables;

使用HIVE的命令查看xxx表中的字段

1
describe xxx;

使用HIVE命令用PYTHON实现UDF

1
2
3
4
5
6
7
8
add file udf.py;
SELECT 
TRANSFORM(keyword)
USING 'python udf.py'
AS(keyword)
FROM xxx
WHERE dt='2013-09-25'
;

要注意的是,这里的TRANSFORM的内容可以写*,但是AS()里就不能写*,会报错。

输入到python中的内容,是按照AS里的数量来决定的。

下面是python的脚本,内容很简单,就是把输入的东西原封不动输出来。

udf.py
1
2
3
4
import sys
for line in sys.stdin:
  line = line.strip()
  print line


########################################################################

Hive可以使用Python脚本大大地提高数据处理的开发效率,使用MapReduce的方式将数据处理成想要的结果。

 

我们使用ADD FILE 为Hive增加一个脚本,或者Jar包。

有两种方式:

ADD FILE {env:HOME}/your_file/your_script.py

ADD FILE /home/your_name/your_file/your_script.py

 

在调用的时候,过去的版本可以使用:

FROM u_data
SELECT
  TRANSFORM (userid, movieid, rating)
  USING 'python /home/dacoolbaby/test_data_mapper3.py'
  AS str
;

 

但是在Hive 0.10貌似不支持这样弄。

FROM u_data
SELECT
  TRANSFORM (userid, movieid, rating)
  USING 'python test_data_mapper3.py'
  AS str
;

 

后面的是脚本的名称,而不是整个的路径名。

以后在Hive下面使用Hadoop Distributed Cache要注意这个问题。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值