hive输出格式转化,本例以json为例

hive默认是以tab为分隔符,分隔各个输出字段,如

hive> select get_json_object(json.value,'$.hour'),get_json_object(json.value,"$.channel") from json limit 10;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201304271626_0032, Tracking URL = http://linjianke:50030/jobdetails.jsp?jobid=job_201304271626_0032
Kill Command = /usr/lib/hadoop/bin/hadoop job  -Dmapred.job.tracker=192.168.10.44:8021 -kill job_201304271626_0032
2013-05-15 10:07:11,102 Stage-1 map = 0%,  reduce = 0%
2013-05-15 10:07:15,116 Stage-1 map = 100%,  reduce = 0%
2013-05-15 10:07:17,125 Stage-1 map = 100%,  reduce = 100%
Ended Job = job_201304271626_0032
OK
2013-04-07 16	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-07 22	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-08 00	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-08 01	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-09 01	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-09 07	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-09 16	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-09 17	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-09 21	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
2013-04-10 01	f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8
Time taken: 9.531 seconds

 

因为业务需要,蒋输出转为json格式,可以用hive提供的transform函数

 

hive> select transform(get_json_object(json.value,'$.hour'),get_json_object(json.value,"$.channel")) using '/usr/bin/python transform.py aa bb' as (result string) from json limit 10;

 输出为

{"aa":"2013-04-07 16","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-07 22","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-08 00","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-08 01","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-09 01","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-09 07","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-09 16","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-09 17","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-09 21","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}
{"aa":"2013-04-10 01","bb":"f32d98f8-8ac5-11e2-8a47-bc305bf4bcb8"}

 python脚本:对python还不大熟悉,写的可能比较搓


#!/usr/bin/python
#coding:utf8
import sys
for line in sys.stdin:
    if len(line) == 0:
        #print 'end'
        break
    if line.count('\n') == len(line):
        #print 'continue'
        continue
    line=line.strip('\n')
    arr=line.split('\t')
    if len(arr) != len(sys.argv) - 1:
        print 'error'
        break
    for i in range(0,len(arr)):
        arr[i]='"%s":"%s"' % (sys.argv[i+1],arr[i])
    content = ','.join(arr)
    print '{%s}' % content

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值