HIVE中使用python实现UDAF
HIVE,FACEBOOK的一个开源项目,利用类SQL的语句(HiveQL)来加快一般的MapReduce的开发过程。
UDF,user defined function, 因为HIVE毕竟不是一般的关系型数据库,支持的HQL有限,如果要实现复杂的功能,就要通过自己定义函数来帮助实现。
HIVE应该利用PIPE的原理,将自己查询的结果放到python脚本的stdin中。所以他的查询结果不会显示在terminal中,terminal中显示的结果是python的执行结果。
使用HIVE的命令进入数据仓库(mydbname是你的数据库)
[sql]use mydbname;[/sql]
使用HIVE的命令查看已经建立的表
[sql]show tables;[/sql]
使用HIVE的命令查看(mytable)表中的字段
[sql]desc mytable;[/sql]
使用HIVE命令用PYTHON实现UDF。
通过transform语句,可以将hive语句中select得到的数据通过类似hadoop中streaming的方式,传给using语句中的脚本作为输入。用DISTRIBUTE BY将mapper的输出分类给reducer.
[sql]
add file /pathof/udf.py;
SELECT
TRANSFORM(keyword)
USING ‘python /pathof/udf.py’
AS(keyword)
FROM xxx
WHERE dt=’2013-09-25′
;
[/sql]
要注意的是,这里的TRANSFORM的内容可以写*,但是AS()里就不能写*,会报错。
输入到python中的内容,是按照AS里的数量来决定的。
下面是python的脚本,内容很简单,就是把输入的东西原封不动输出来。
/pathof/udf.py
[python]
import sys
for line in sys.stdin:
line = line.strip()
print line
[/python]
这是UDF不是UDAF吧。。。。UDAF是多行结果处理之后只输出一行
同意,简而言之,博主就是摘抄而已,其实什么也不动。
标题党。
有什么方法可以实现开源hive的udaf吗?