Python实现Hive的UDF

流程

主要分为两个部分,一个部分为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里,然后将其不作处理,直接输出即可。

更多信息/快速联系博主

快速联系博主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值