ruby和pig處理流式文件實(shí)例
大數(shù)據(jù)操作中涉及到數(shù)據(jù)清洗步奏還是用腳本處理比較方便,下邊介紹一下pig加載hdfs文件后調(diào)用ruby腳本處理數(shù)據(jù),再返回?cái)?shù)據(jù)流至pig中處理的一個(gè)簡(jiǎn)單案例。
注意:ruby的流式處理用到wukong這個(gè)gem包,相關(guān)下載:
https://github.com/mrflip/wukong
pig中加載分布式文件調(diào)用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;調(diào)用定義的外部程序tra_parser處理log對(duì)象。
Wukong.run ParseClick::Mapper, nil執(zhí)行完后,將ruby執(zhí)行結(jié)果回調(diào)pig接收。
store strmo into '$OUTFILE' using PigStorage('\t');做結(jié)果存儲(chǔ)持久化。
相關(guān)文章
Ruby中Time對(duì)象的常用函數(shù)總結(jié)
這篇文章主要介紹了Ruby中Time對(duì)象的常用函數(shù)總結(jié),包括Ruby中一些實(shí)用的時(shí)間算法,需要的朋友可以參考下2016-03-03
Ruby on Rails所構(gòu)建的應(yīng)用程序基本目錄結(jié)構(gòu)總結(jié)
Ruby on Rails是Ruby世界中一家獨(dú)大的Web開發(fā)框架,要掌握Rails程序的構(gòu)建,對(duì)其目錄結(jié)構(gòu)的了解十分必要,下面就來(lái)看一下Ruby on Rails所構(gòu)建的應(yīng)用程序基本目錄結(jié)構(gòu)總結(jié)2016-05-05
GitHub倡導(dǎo)的Ruby代碼編寫風(fēng)格總結(jié)
GitHub網(wǎng)站服務(wù)器端主要就是使用的Ruby作為編程語(yǔ)言,因而GitHub所提倡采用的Ruby書寫規(guī)范也就顯得更有些說(shuō)服力XD 下面我們就整理除了這份GitHub倡導(dǎo)的Ruby代碼編寫風(fēng)格總結(jié),需要的朋友可以參考下2016-05-05
ruby實(shí)現(xiàn)修改ubuntu下的hosts
本文給大家分享的是通過(guò)ruby獲取github上的hosts文件內(nèi)容,修改到本地Ubuntu中,十分的實(shí)用,具體你懂得,有需要的小伙伴可以參考下。2015-06-06
ruby使用restclient上傳服務(wù)器本地文件示例
這篇文章主要介紹了ruby使用restclient上傳服務(wù)器本地文件示例,需要的朋友可以參考下2014-05-05
Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式
這篇文章主要介紹了Ruby中使用設(shè)計(jì)模式中的簡(jiǎn)單工廠模式和工廠方法模式的示例,這兩種模式經(jīng)常被用于Ruby on Rails開發(fā)的結(jié)構(gòu)設(shè)計(jì)中,需要的朋友可以參考下2016-03-03

