ruby和pig处理流式文件实例

 更新时间:2015年01月04日 09:59:54   投稿:junjie  
这篇文章主要介绍了ruby和pig处理流式文件实例,本文讲解pig加载hdfs文件后调用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');做结果存储持久化。

相关文章

  • Ruby中的集合编写指南

    Ruby中的集合编写指南

    这篇文章主要介绍了Ruby中的集合编写指南,作者提出了编程过程中集合方面的一些需要注意的地方,需要的朋友可以参考下
    2015-08-08
  • 编写Ruby代码注释时需要注意的一些问题

    编写Ruby代码注释时需要注意的一些问题

    这篇文章主要介绍了编写Ruby代码注释时需要注意的一些问题,特别是在团队协作时好的注释能大大增加代码的可读性,需要的朋友可以参考下
    2015-08-08
  • Ruby中require、load、include、extend的区别介绍

    Ruby中require、load、include、extend的区别介绍

    这篇文章主要介绍了Ruby中require、load、include、extend的区别介绍,require、load用于文件,如.rb等等结尾的文件,include、load则用于包含一个文件中的模块,需要的朋友可以参考下
    2015-05-05
  • Ruby基础知识之类

    Ruby基础知识之类

    这篇文章主要介绍了Ruby基础知识之类,本文讲解了类的创建、访问器、类变量、常量、类方法、方法的访问性、工厂方法、模块module等内容,需要的朋友可以参考下
    2015-04-04
  • 举例理解Ruby on Rails的页面缓存机制

    举例理解Ruby on Rails的页面缓存机制

    这篇文章主要介绍了举例理解Ruby on Rails的页面缓存机制,本文来自于IBM官方网站技术文档,需要的朋友可以参考下
    2015-04-04
  • ruby实现网页图片抓取

    ruby实现网页图片抓取

    本文给大家分享的是个人使用ruby编写的抓取网页图片的代码,十分的简单实用,有需要的小伙伴可以参考下。
    2015-06-06
  • Ruby中的类Google Map/Reduce框架Skynet介绍

    Ruby中的类Google Map/Reduce框架Skynet介绍

    这篇文章主要介绍了Ruby中的类Google Map/Reduce框架Skynet介绍,Skynet是一款创建分布式应用程序的框架,需要的朋友可以参考下
    2015-01-01
  • 关于Ruby on Rails路由配置的一些建议

    关于Ruby on Rails路由配置的一些建议

    这篇文章主要介绍了关于Ruby on Rails路由配置的一些建议,作者提出了相关代码编写时一些值得注意的地方,需要的朋友可以参考下
    2015-08-08
  • Rails应用程序中同时修改操作冲突问题的解决方案

    Rails应用程序中同时修改操作冲突问题的解决方案

    这篇文章主要介绍了Rails应用程序中同时修改操作冲突问题的解决方案,本文讲解使用Rails 的 乐观锁解决这个问题并给出了代码救命,需要的朋友可以参考下
    2015-03-03
  • Ruby中的public、private、protected区别小结

    Ruby中的public、private、protected区别小结

    这篇文章主要介绍了Ruby中的public、private、protected区别小结,即Ruby中访问控制符的区别总结,需要的朋友可以参考下
    2014-08-08

最新评论