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;  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章