Pig实战
1. pig简介
2. 安装pig
3. 实战pig
4. 深入pig
5. 参考资料及代码下载
<1>. Pig简介
pig是hadoop项目的一个拓展项目, 用以简化hadoop编程(简化的程度超乎想象啊),并且提供一个更高层次抽象的数据处理能力,同时能够保持hadoop的简单和可靠性。
<2>. 安装pig
2.1 下载pig:[点击下载]pig安装包
2.2 解压下载完成的pig安装包:
xuqiang@ubuntu:~/hadoop/src/pig$ tar zxvf pig-0.8.1.tar.gz
xuqiang@ubuntu:~$ vim .bashrc
为了使新设置的环境变量生效,使用如下命令:
xuqiang@ubuntu:~$ pig -x local
此时表明pig已经正确安装。
<3>. Pig实战
在pig下载的安装包,解压完成了之后,有一个tutorial目录,我们使用里面的数据来开始pig学习。如果tutorial目录下没有存在pigtutorial.tar.gz文件的话,那么需要使用ant来编译出这个文件:
xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ ant
xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ cd tutorial/
.
我们下面将主要分析excite-small.log文件,该文件的数据结构如下:
UserID TimeStamp SearchQuery
我们首先将excite-small.log加载到一个变量(也称之为alias)中,我们将使用该变量来表示这个数据集:
grunt> log = load 'excite-small.log' as (user, time, query);
这时如果想要查看该log的结构:
grunt> describe log;
这是如果我们想要查看该log文件的前4行的话:
grunt> lmt = limit log 4;
这时将打印出log文件的前四行数据。
<4>. 深入pig
4.1 Utility and file commands

4.2 Data read/write operators

4.3 Diagnostic operators诊断操作

4.4 Data type and schemes
pig中有6个基本数据类型和3个复合数据类型,基本数据类型如下:

复合数据类型:

pig中数据模型中能够允许数据类型的嵌套,类似于xml/json格式。
4.5 Expression and functions
pig能够支持常见运算符。

同时在pig中提供了一些内建函数。

这里我们没有给出示例,将在下面给出示例。
4.6 Retional operators
首先编写两个数据文件A:
0,1,2
数据文件B:
0,5,2
xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1/tutorial/pigtmp$ pig -x local
加载数据A:
grunt> a = load 'A' using PigStorage(',') as (a1:int, a2:int, a3:int);
grunt> b = load 'B' using PigStorage(',') as (b1:int, b2:int, b3:int);
grunt> c = union a, b;
grunt> dump c;
(0,5,2)
将c分割为d和e,其中d的第一列数据值为0,e的第一列的数据为1($0表示数据集的第一列):
grunt> split c into d if $0 == 0, e if $0 == 1;
grunt> dump d;
(0,1,2)
(1,3,4)
选择c中的一部分数据:
grunt> dump f;
查看g:
grunt> dump g;
(2,{(0,1,2),(0,5,2)})
grunt> h = group c all;
(all,{(0,1,2),(1,3,4),(0,5,2),(1,7,8)})
grunt> i = foreach h generate COUNT($1);
grunt> dump i;
这里可能出现Could not resolve counter using imported: [, org.apache.pig.built in., org.apache.pig.impl.builtin. ]的情况,这是需要使用register命令来注册pig对应的jar版本。
接下俩试一下jon操作:
取出c的第二列$1和$1 * $2,将这两列保存在k中:
grunt> k = foreach c generate $1, $1 * $2;
grunt> dump k;
(5,10)
4.7 Working with UDF(user defined function)
pig能够支持两种类型的UDFs:eval和load/store,其中load/store的自定义函数主要是用来加载和保存特定的数据格式;eval自定义函数主要用来进行常规的数据转换。
1. eval
如果想要实现自定义的eval类型的函数,那么基本的做法是首先编写一个类继承自EvalFunc<T>这个抽象类,同时需要重写这个类的一方法:
abstract public T exec(Tuple input) throws IOException;
该方法传入的类型是Tuple类型。
如果调用udf时使用的是:udf(ARG1, ARG2);那么调用input.get(0)将得到ARG1,同理input.get(1)得到的是ARG2,input.getSize()得到传递的参数的数量,这里就是2.
下面我们就开始编写udf UPPER.java,将UPPER.java文件保存到myudfs目录下:
package myudfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.util.WrappedIOException;
public class UPPER extends EvalFunc<String>
{
public String exec(Tuple input) throws IOException {
if (input == null || input.size() == 0)
return null;
try{
String str = (String)input.get(0);
return str.toUpperCase();
}catch(Exception e){
throw WrappedIOException.wrap("Caught exception processing input row ", e);
}
}
}
编译该文件,同时生成该jar文件:
xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1/myudfs$ cd ..
student1,1,1 studetn2,2,2 student3,3,3 student4,4,4
在pig中测试该udf:
xuqiang@ubuntu:~/hadoop/src/pig/pig-0.8.1$ pig -x local
注册该udf:
加载数据:
(STUDENT1) (STUDETN2) (STUDENT3) (STUDENT4)
<5>. 参考资料及代码下载
http://pig.apache.org/docs/r0.8.1/udf.html#How+to+Write+a+Simple+Eval+Function
<Hadoop In Action>
Pig实战的更多相关文章
- Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集
(一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blo ...
- Hadoop、Pig、Hive、NOSQL 学习资源收集
转自:http://www.cnblogs.com/zzjhn/p/3855566.html (一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http:// ...
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Hive介绍 1.1 Hive介绍 月开源的一个数据仓库框架,提供了类似于SQL语法的HQ ...
- 【Pig源码分析】谈谈Pig的数据模型
1. 数据模型 Schema Pig Latin表达式操作的是relation,FILTER.FOREACH.GROUP.SPLIT等关系操作符所操作的relation就是bag,bag为tuple的 ...
- 大数据之pig 命令
1.pig与hive的区别 pig和hive比较类似的,都是类sql的语言,底层都是依赖于hadoop 走的mapreduce任务. pig和hive的区别就是,想要实现一个业务逻辑的话, ...
- Hadoop实战课程
Hadoop生态系统配置Hadoop运行环境Hadoop系统架构HDFS分布式文件系统MapReduce分布式计算(MapReduce项目实战)使用脚本语言Pig(Pig项目实战)数据仓库工具Hive ...
- 使用Pig预测电信用户的移动路径
实战数据: 预期结果: 测试数据: 002|2014-09-10 00-09|东油大学 002|2014-09-10 09-17|学苑小区 001|2014-09-12 00-09|东油大学 001| ...
- 顶尖大数据挖掘实战平台(TipDM-H8)产品白皮书
顶尖大数据挖掘实战平台 (TipDM-H8) 产 品 说 明 书 广州泰迪智能科技有限公司 版权所有 地址: 广州市经济技术开发区科学城232号 网址: http: ...
- 深入浅出Hadoop Mahout数据挖掘实战(算法分析、项目实战、中文分词技术)
Mahout简介 Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目, 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建 ...
随机推荐
- hdu 4628(状态压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 思路:首先把所有的回文找出来,如果当前状态为回文,则dp[state]=1,否则dp[state ...
- http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html
http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html
- 聊聊并发(八)——Fork/Join框架介绍
作者 方腾飞 发布于 2013年12月23日 | 被首富的“一个亿”刷屏?不如定个小目标,先把握住QCon上海的优惠吧!2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 ...
- (KEIL)MDK5安装与JLINK问题解决方法(支持代码自动补全)
MDK V5在10月8日发布,昨天终于没忍住装上使用了一下,尝了尝鲜. 安装和破解的方法相信各位高手都不在话下,实在不会的可以参考keil4的安装步骤,keil5 和 keil4的安装没有的区别. ...
- Android NDK 和 OpenCV 整合开发总结(3)
Android NDK 和 OpenCV 整合开发总结(3) http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-open ...
- 练习用php做表格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- QQ2013手工去广告
QQ的广告令人讨厌,虽然网上有很多去广告补丁或者是去广告版,但是总是害怕有被盗号的风险,那除了付费会员还有其他什么方法可以安全的去除qq广告吗?显然有,那就是手动去广告. 很简单,不会比使用去广告补丁 ...
- [转]c/c++输入函数
最全输入函数 c/c++ 一: c=getchar(); 功能:读入一个字符 说明:调用此函数时要求在程序的第一行有预编译命令:#include<stdio>,不过在做c++时 有#inc ...
- poj -2229 Sumsets (dp)
http://poj.org/problem?id=2229 题意很简单就是给你一个数n,然后选2的整数幂之和去组成这个数.问你不同方案数之和是多少? n很大,所以输出后9位即可. dp[i] 表示组 ...
- Android Touch(2)View.OnTouchEvent与View.OnTouchListener区别
1,在官方文档 docs/reference/android/view/View.OnTouchListener.html 中对OnTouchListener的描述 Interface definit ...