PIG入门
★ PIG简介
1:Pig是基于Hadoop的一个数据处理框架。
MapReduce是使用Java进行开发,Pig有一套自己的数据处理语言,Pig的数据处理过程要转化为MR来运行。
2:Pig的数据处理语言是数据流方式的。何为数据流?
3:Pig的基本数据类型:int、long、float、double、chararry、bytearray
Pig的复杂数据类型:Map 、Tuple、Bag
Bag的类型如下:
{('age',31),('name','lili')}
★ PIG数据类型
以下图片摘自官网。
简单类型有:int long float double chararray bytearray boolean datetime
复杂类型有:tuple bag map
上图有相应数据类型的示例。
★ Pig的安装
上传安装包,解压、重命名省略
1:编辑文件vi /etc/profile 设置环境变量
export $PIG_HOME=/usr/local/pig
export PATH =......$PIG_HOME/bin
保存,然后执行source /etc/profile
2:编辑文件$PIG_HOME/conf/pig.properties,增加两行如下内容
fs.default.name=hdfs://hadoop5:9000
mapred.job.tracker=hadoop5:9001
★ Pig命令行示例
进入命令行方式,进入$PIG_HOME/bin目录下
执行命令:pig 进入如下命令行提示信息。
▲ 1:准备数据
表数据
table1.txt
=====================================
zhangsan 23 1
lisilisi 24 1
wangmazi 30 1
meinv 18 0
dama 55 0
table2.txt
=====================================
1 a
23 bb
50 ccc
30 dddd
66 eeeee
▲ 2:从文件导入数据
table1 = LOAD '/table1.txt' USINGPigStorage('\t') AS (user:chararray, age:int,is_male:int);
table2 = LOAD '/table2.txt' USINGPigStorage('\t') AS (age:int,options:chararray);
▲ 3:查询整张表
DUMP table1;
DUMP table2;
▲ 4:查询前2行
limit_table1 = LIMIT table1 2;
DUMP limit_table1;
▲ 5:查询某些列
column_table1 = FOREACH table1 GENERATEuser;
DUMP column_table1;
▲ 6:给列取别名
alias_table1 = FOREACH table1 GENERATE userAS user_name,age AS user_age;
DUMP alias_table1;
▲ 7:排序
order_table1 = ORDER table1 BY age ASC;
DUMP order_table1;
▲ 8:条件查询
condition_table1 = FILTER table1 by age> 20;
DUMP condition_table1;
▲ 9:内连接Inner Join
inner_join_table = JOIN table1 BYage,table2 BY age;
DUMP inner_join_table;
▲ 10:左连接Left Join
left_join_table = JOIN table1 BY age LEFTOUTER,table2 BY age;
DUMP left_join_table;
▲ 11.右连接Right Join
right_join_table = JOIN table1 BY age RIGHTOUTER,table2 BY age;
DUMP right_join_table;
▲ 12.全连接Full Join
full_join_table = JOIN table1 BY age FULLOUTER,table2 BY age;
DUMP full_join_table;
▲ 13.同时对多张表交叉查询
cross_table = CROSS table1,table2;
DUMP cross_table;
▲ 14.分组GROUP BY
group_table = GROUP table1 BY is_male;
DUMP group_table;
▲ 15.分组并统计
group_count_group_table = GROUP table1 BYis_male;
group_count_group_table = FOREACHgroup_count_group_table GENERATE group,COUNT($1);
DUMP group_count_group_table;
▲ 16.查询去重DISTINCT
distinct_table = FOREACH table1 GENERATEis_male;
distinct_table = DISTINCT distinct_table;
DUMP distinct_table;
▲ 17 保存数据到HDFS
待补充
★ 案例1:用PIG LATIN 处理电信上网例子
以下是数据格式:
以下是各个字段的意思。
步骤:
1:把待处理的数据上传到HDFS中/wlan
2:把HDFS中的数据转换为pig可以处理的模式
A= LOAD '/wlan' AS (t0:long, msisdn:chararray, t2:chararray, t3:chararray,t4:chararray, t5:chararray, t6:long, t7:long, t8:long, t9:long, t10:chararray);
3:把里面的有用的字段抽取出来
B= FOREACH A GENERATE msisdn, t6, t7, t8, t9;
4:分组数据
C= GROUP B BY msisdn;
5:流量汇总
D= FOREACH C GENERATE group, SUM(B.t6),SUM(B.t7), SUM(B.t8), SUM(B.t9);
6:存储到HDFS中
STORE D INTO '/wlan_result';
★ 案例2:用PIG LATIN 处理学生选课信息