transform调用脚本

Hive专栏
上一篇 主目录 下一篇

目录

【前言】
在使用hive处理数据时,除了可以使用内置函数、用户自定义函数UDF,还可以使用hql调用脚本,这种调用脚本的方式由Hive的 TRANSFORM 关键字提供。


一个实例
Json数据: {"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
需求:把timestamp的值转换成日期编号

  1. 先加载rating.json文件到hive的一个原始表 rate_json
create table rate_json(line string) row format delimited;  
load data local inpath '/home/hadoop/rating.json' into table rate_json;  
  1. 创建rate这张表用来存储解析json出来的字段
create  table  rate(movie  int,  rate  int,  unixtime  int,  userid  int)  row  format  delimited  fields  terminated by '\t'; 
  • 解析json,得到结果之后存入rate表
insert into table rate select   
get_json_object(line,'$.movie') as movie,  
get_json_object(line,'$.rate') as rate,  
get_json_object(line,'$.timeStamp') as unixtime,   get_json_object(line,'$.uid') as userid   
from rate_json;  
  1. 使用transform+python脚本的方式去转换unixtime为weekday
    创建最后的用来存储调用python脚本解析出来的数据的表:lastjsontable
create table lastjsontable(movie int, rate int, weekday int, userid int) row format delimited  fields terminated by '\t';  

编辑一个python脚本文件

 vi weekday_mapper.py  
#!/bin/python  
import sys  
import datetime  
for line in sys.stdin:  
  line = line.strip()  
  movie,rate,unixtime,userid = line.split('\t')  
  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
  print '\t'.join([movie, rate, str(weekday),userid])  

保存文件 。然后,将文件加入hive的classpath:

hive>add file /home/hadoop/weekday_mapper.py;  
hive> insert into table lastjsontable select transform(movie,rate,unixtime,userid)  using 'python weekday_mapper.py' as(movie,rate,weekday,userid) from rate; 

最后查询看数据是否正确:

select distinct(weekday) from lastjsontable;  
发布了180 篇原创文章 · 获赞 149 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_33208851/article/details/104876436