现在的位置: 首页 > 综合 > 正文

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

2017年12月20日 ⁄ 综合 ⁄ 共 1203字 ⁄ 字号 评论关闭

在对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 可以用其他语言实现。

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

抱歉!评论已关闭.