hive 使用streaming 的map 脚本来处理数据

在对hive 进行 select 查询的时候 我们可以编写 python 、php 、c++等脚本来进行相应的数据处理,我们要用到hive  的 TRANSFORM  和  using 


看例子:

add file /www/FCCS_Data/ComETL/hive/sql_map/demo.py ; 
from access_fccs select  TRANSFORM (time)  using 'python  demo.py'  where week=41  limit 10 ;

或者:

add file  /www/FCCS_Data/ComETL/hive/sql_map/demo.py;
select   TRANSFORM (time)  using 'python   demo.py' as (time) from (select *   from access_fccs  where week=41  limit 10) a  ;


上面 SQL的意思是 将查询结果集中的 time 通过 demo.py 进行处理 返回相应的结果,至于都做什么处理了,请看下面的demo.py代码。


这里我们需要注意的是,一定要先 将map脚本添加到分布式缓存中,否则会报错   metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script. at  这种错误



特别说明 这里的 路径为本地路径 不是分布式HDFS 路径,新手比较容易搞混


然后看看我们的demo.py 是怎么写的

#!/usr/bin/env  python
#-*- coding:utf-8 -*-
import sys
import datetime
import time

#把时间戳转成字符串形式
def timestamp_toString(stamp):
    return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(stamp))

for line  in sys.stdin:
        print timestamp_toString(float(line))

董python 的朋友不难看出 这里是将我们的时间戳转化成日期格式输出


因此我们执行完毕 hive SQL 后 的结果为:


Total MapReduce CPU Time Spent: 23 seconds 880 msec
OK
2013-10-11 13:11:47
2013-10-11 13:11:47
2013-10-11 13:11:47
2013-10-11 13:11:47
2013-10-11 13:11:47
2013-10-11 13:11:48
2013-10-11 13:11:48
2013-10-11 13:11:48
2013-10-11 13:11:48
2013-10-11 13:11:48
Time taken: 33.411 seconds


当然 这只是个例子 demo.py 可以用其他语言实现。

希望能帮到和我一样的新手同学。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值