Hive——巧用transform处理复杂的字符串问题

赵志勇

2017-05-31


相比于Map-Reduce,Hive对数据的处理相对简单,但是Hive本身提供的函数,对于处理复杂的字符串问题,就显得不是很方便,此时,可以借助transform,引入外界的Python程序对字符串进行处理。

transform

transform的基本用法为:

transform中的值作为输入, 然后传递给python脚本,最后经过python的处理后,输出想要得到的字符串格式。transform中的值作为输入, 然后传递给python脚本,最后经过python的处理后,输出想要得到的字符串格式。

transform的基本语法为:

select transform(intput columns)
using 'python *.py'
as (output columns)

注意:在利用本地的python处理时,首先需要add file .py;注意:在利用本地的python处理时,首先需要add file .py;

实例

假设目前我们有如下的一些数据:

需要取出以分号“;”分隔的倒数第二位。实际的代码如下:

Hive的代码:

function create_table(){
    sql_create_table_1="drop table if exists ${table_name_deal};
    create table if not exists ${table_name_deal}(
    deal string
    )
    row format delimited fields terminated by '\t'
    lines terminated by '\n'
    stored as rcfile
    location '${table_path}/${table_name_deal}';"
    hive -e"${sql_create_table_1}"

}

function data_deal(){
    deal_sql="add file deal.py;
    insert overwrite table ${table_name_deal}
    select a.deal
    from
    (select transform(match_id)
                using 'python deal.py'
                as (deal)
                from ${table_name_sel}
            ) a;"

    hive -e"${deal_sql}"
}

python脚本

#!/usr/bin/python
#coding:UTF-8

import sys

for line in sys.stdin:
    lines = line.strip().split(";")
    if len(lines) < 10:
        continue

    deal = lines[-2]
    print deal-

读者评论

相关博文

  • 社区使用反馈专区

    陈晓猛 2016-10-04

    尊敬的博文视点用户您好: 欢迎您访问本站,您在本站点访问过程中遇到任何问题,均可以在本页留言,我们会根据您的意见和建议,对网站进行不断的优化和改进,给您带来更好的访问体验! 同时,您被采纳的意见和建议,管理员也会赠送您相应的积分...

    陈晓猛 2016-10-04
    5421 735 3 7
  • 迎战“双12”!《Unity3D实战核心技术详解》独家预售开启!

    陈晓猛 2016-12-05

    时隔一周,让大家时刻挂念的《Unity3D实战核心技术详解》终于开放预售啦! 这本书不仅满足了很多年轻人的学习欲望,并且与实际开发相结合,能够解决工作中真实遇到的问题。预售期间优惠多多,实在不容错过! Unity 3D实战核心技术详解 ...

    陈晓猛 2016-12-05
    3299 36 0 1
  • czk 2017-07-29
    5866 28 0 1