大数据操作中涉及到数据清洗步奏还是用脚本处理比较方便,下边介绍一下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');做结果存储持久化。
分享到:
相关推荐
大数据操作中涉及到...pig中加载分布式文件调用ruby流式处理: 代码如下: log = load ‘$INFILE’ using PigStorage(‘\t’); define tracking_parser `/usr/ruby parse_click.rb –map` SHIP(‘parse_click.rb’,
标题 "用ruby读excel文件生成xml文件" 描述的是一项技术任务,即使用Ruby编程语言来处理Excel文件,并将其内容转换成XML格式。这在数据迁移、格式转换或与不支持Excel格式的应用程序进行数据交换时非常有用。Ruby库...
使用RUBY语言将TXT文件中的内容写入到excel中!
### Ruby中的文件与目录处理 #### 10.1 处理文件和目录 计算机的主要功能之一就是处理数据,这不仅包括内部计算,还包括输入输出(I/O)操作,即与外部世界的交互。Ruby作为一种现代的编程语言,为用户提供了一套...
在本篇文章中,我们将深入探讨如何在Ruby中有效地读取和处理cfg文件,以及如何根据指定的键来获取对应的值。 首先,让我们了解cfg文件。Cfg文件是一种文本文件,常用于存储应用程序的配置信息,如设置、选项或参数...
比如CSV(逗号分隔值),经常用来存储表格数据,Ruby提供了CSV模块来读取和写入CSV文件。在处理XML数据时,Ruby的REXML库能够解析和生成XML文档,支持XML数据的提取和操作。 总的来说,Ruby是处理文本数据的强大...
9. **Carrierwave或Paperclip**:这两个是Ruby社区广泛使用的文件上传库,它们提供了处理文件上传、缩略图生成、版本控制等功能,简化了开发流程。 10. **Validation**:在保存文件信息到数据库之前,你可能需要...
该脚本可以扫描指定路径,将符合条件的文件全部找出。你可以添加自己的函数来处理符合条件的文件。如删除某个文件夹里的所有特定文件
在Ruby编程语言中,文件对比是一项常见的任务,尤其在处理文本文件、代码比较或日志分析时。本文将深入探讨如何使用Ruby实现文件对比,并提供相关的实例和技巧,帮助你编写出自己的文件对比脚本或生成对比报告。 一...
`File`类是Ruby中的核心类,用于处理文件的相关操作。以下是一些常用方法: 1. **创建文件**:`File.open("filename.txt", "w") { |file| file.write("Hello, World!") }` 这行代码会创建一个名为`filename.txt`的...
在处理文本数据时,如读写txt文件,Ruby提供了简洁而直观的API。下面将详细介绍Ruby如何进行txt文件的读写操作。 一、打开和关闭文件 在Ruby中,我们通常使用`File`类的方法来操作文件。读取txt文件时,可以使用`...
**Ruby-Mailman:一个高效的邮件接收与处理框架** Ruby-Mailman 是一个专门为 Ruby 开发者设计的轻量级邮件处理微框架。它旨在简化邮件服务器接收到的电子邮件的处理流程,帮助开发者构建邮件相关的应用程序,如...
要从Ruby程序中导出数据到CSV文件,我们可以利用`FasterCSV`库,它为处理CSV文件提供了高效且灵活的方法。尽管在Ruby 1.9及更高版本中,`FasterCSV`已经被`csv`标准库所取代,但在某些情况下,开发者可能仍选择使用`...
Ruby是一种动态且灵活的编程语言,它在处理各种文件格式时提供了丰富的库支持。当我们谈论“Ruby读取INI文件”时,我们指的是使用Ruby代码解析和操作INI配置文件。INI文件是一种简单的文本文件格式,常用于存储软件...
Ruby Ini文件读写是Ruby编程语言中处理配置文件的一种常见方式。INI文件是一种简单的文本格式,通常用于存储程序的配置信息,以键值对的形式组织数据。Ruby提供了多种库来帮助开发者轻松地读取和写入这些文件,使得...
Ruby在某些操作,如处理.gemspec文件或某些扩展时,可能会用到zlib。不过,由于这个版本的Ruby编译时没有包含zlib,这意味着你可能需要单独安装zlib库来实现这些功能。 4. **VC2017编译**:这意味着Ruby 2.5.3是...
"Ruby-rubyserver标准文件协议的生产就绪实现" 提到的是一个专门针对Ruby实现的、遵循标准文件协议的服务器解决方案,适用于生产环境。这种实现确保了在高并发和稳定性的需求下,服务器依然能高效、可靠地运行。 1....
ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件ruby打包文件
在Ruby编程语言中,实现邮件的收发是常见的任务,主要涉及到SMTP(Simple Mail Transfer Protocol)和POP(Post Office Protocol)协议。以下是对标题和描述中提到的知识点的详细解释。 1. **通过SMTP发送Email** ...
ruby的库帮助文件,对于Ruby开发者应该必备的工具