ruby和pig处理流式文件实例
大数据操作中涉及到数据清洗步奏还是用脚本处理比较方便,下边介绍一下pig加载hdfs文件后调用ruby脚本处理数据,再返回数据流至pig中处理的一个简单案例。
注意:ruby的流式处理用到wukong这个gem包,相关下载:
https://github.com/mrflip/wukong
pig中加载分布式文件调用ruby流式处理:
代码如下:
log = load '$INFILE' using PigStorage('\t'); define tracking_parser `/usr/ruby parse_click.rb --map` SHIP('parse_click.rb', 'click_tracking.rb'); strmo = stream log through tra_parser; store strmo into '$OUTFILE' using PigStorage('\t');
代码如下:
require 'wukong' require 'json' require './click_tra.rb' module ParseClick class Mapper < Wukong::Streamer::RecordStreamer def before_stream @bad_count = 0 end def after_stream raise RuntimeError, "Exceeded bad records : #{@bad_count}" if @bad_count > 10 end def process *records yield ClickTra.new(JSON.parse(records[2])).to_a rescue => e @bad_count += 1 warn "Bad record #{e}: #{records[2]}" end end end Wukong.run ParseClick::Mapper, nil
代码如下:
require 'date' require './models.rb' class ClickTra output :ip output :c_date #output your other atrributes def c_date click_date.strftime("%Y%m%d").to_i end def ip browser_ip.to_i end end
其中
strmo = stream log through tra_parser;调用定义的外部程序tra_parser处理log对象。
Wukong.run ParseClick::Mapper, nil执行完后,将ruby执行结果回调pig接收。
store strmo into '$OUTFILE' using PigStorage('\t');做结果存储持久化。
相关推荐
PMJ0 2020-10-13
longzhiwen 2020-09-06
yangxingstar 2020-08-31
LUCIEN0 2020-08-17
huangzihao00 2020-08-17
Jan 2020-08-17
AndesStay 2020-06-12
afengxg 2020-06-09
zamesking 2020-06-09
afengxg 2020-06-09
何志文 2020-06-09
teresalxm 2020-06-05
何志文 2020-05-16
何志文 2020-05-11
fsl 2020-05-04
JOO 2020-04-26
倩 2020-04-22
afanti 2020-04-19
始终不够 2020-04-10