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

来源:互联网 发布:淘宝新店怎么参加活动 编辑:程序博客网 时间:2024/06/05 00:17

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

transform

transform的基本用法为:

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

transform的基本语法为:

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

注意:在利用本地的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-8import sysfor line in sys.stdin:    lines = line.strip().split(";")    if len(lines) < 10:        continue    deal = lines[-2]    print deal
原创粉丝点击