环境搭建:
一、pig的安装:
1、官网地址pig-0.17.0
Welcome to Apache Pig!
2、解压:
tar -zxvf pig-0.17.0.tar.gz -C /home
3、重命名:
mv pig-0.17.0 pig
4、编辑环境变量:
vim /etc/profile
5、使环境变量立即生效:
source /etc/profile
6、启动测试:
a、进入本地模式:
pig -x local
b、进入MapReduce模式:
pig -x mapreduce
Pig安装完成
二、Pig的应用:
A、计算多维度组合下的平均值
1、创建测试数据文件:
vim data1.txt
a 1 2 3 4.2 9.8 a 3 0 5 3.5 2.1 b 7 9 9 a 7 9 9 2.6 6.2 a 1 2 5 7.7 5.9 a 1 2 3 1.4 0.2
注:此处内容使用Tab键分割
2、进入本地调试模式:
pig -x local
3、使用pig计算data1.txt第2.3.4列的所有组合中,最后两列的平均值分别为多少:
A = LOAD 'data1.txt' AS (col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double); B = GROUP A BY(col2,col3,col4); c = FOREACH B GENERATE group,AVG(A.col5),AVG(A.col6); DUMP c;
Pig输出结果如下:
注:语句需要一行一行输入执行,可以看到Pig输出结果完全正确
B、统计数据行数
1、统计A中含col2字段的数据有多少行:
A = LOAD 'data1.txt' AS (col1:chararray,col2:int,col3:int,col4:int,col5:double,col6:double); B = GROUP A ALL; C = FOREACH B GENERATE COUNT(A.col2); DUMP C;
2、查看结果:
注:这和SQL的Count统计数据行数一样,可以看到结果为 6
C、Pig中使用Shell进行辅助数据处理
1、创建测试数据data2.txt
vim data2.txt
1 5 98 = 7 34 8 6 3 2 62 0 6 = 65
2、将数据中第四列的 “=” 全部替换为9999:
A = LOAD 'data2.txt' AS (col1:int,col2:int,col3:int,col4:chararray,col5:int); B = STREAM A THROUGH 'awk'{if($4 == "=") print $1"\t"$2"\t"$3"\t9999\t"$5; else print $0}'`; DUMP B;
3、查看结果:
D、向Pig脚本中传入参数
假设Pig脚本输出的文件是通过外部参数指定的,则此函数不能写死,需要传入
1、在Pig中,传入参数的语句如下:
STORE A INTO '$output_dir';
其中,output_dir就是传入的参数。在调用Pig的Shell脚本时,可以使用以下语句传入参数
pig -param output_dir="/home/my_output_dir/" my_pig_script.pig
这里传入的参数output_dir的值为“ /home/my_output_dir/ ”
centos安装pig(Pig的应用)完成