流程
主要分为两个部分,一个部分为Python脚本实现想要实现的功能,另外一个部分为HQL部分,调用Python脚本对数据进行处理。
Python部分
HQL调用Python实现的UDF其实有一个重定向的过程,把数据表中之列的列重定向Python的标准输入中,按行操作,首先将每行按照指定的分割符分开,一般为’\t’,然后剩下的就是对其进行操作,print需要的列,以’\t’分割。
example:
import sys
ans = {}
for line in sys.stdin:
line = line.split()
shopid = line[0]
if shopid not in ans:
ans[shopid] = []
ans[shopid].append(line[1])
else:
ans[shopid].append(line[1])
for shop in ans:
print shop,'\t',ans[shop]
HQL部分
这里主要就是一个调用的过程:
--首先需要添加Python文件
add file pythonfile_location;
--然后通过transform(指定的列) ,指定的列是需要处理的列
select transform(指定的列)
using "python filename"
as (newname)
--newname指输出的列的别名
注意: 使用transform的时候不能查询别的列
比如:
select a,trans(b,c)
using "python udf.py"
as(d,e)
from table1
where hp_statdate='2016-05-10'
这样就是错的,不能选择a,如果需要a的话可以直接放到transform里,然后将其不作处理,直接输出即可。