用于描述数据流的语言,称为PigLatin。
用于执行PigLatin程序的执行环境,当前有两个环境:单JVM中的本地执行环境和 Hadoop集群上 的分布式执行环境。
Pig自身有新的一套语言,数据处理的过程会自动转换成map-reduce
pig的数据类型:
基本数据类型: int , long , float , double , chararray , bytearray
复合数据类型: map , tuple , bag
注意: pig 的所有关键词和命令都要大写,结束 要加 分号 ,等于号两边要加空格
需求 : 统计如下文件中 每个手机号使用流量的情况
待处理文件:http.dat
下载地址:http://download.youkuaiyun.com/detail/xq_iris/9428040
文件格式:
文件截图:
需要保留的字段有 : 1(手机号)6(上行数据包数)7(下行数据包数)8(上行流量)9(下行流量)
使用 pig 对之进行处理 : 命令pig 进入pig运行模式
step1:将文件传至hdfs
step2:将文件数据类型转化
grunt>/*(重命名,设置别名)*/ A = LOAD '/http' AS (t0:long,t1:chararray,t2:chararray,t3:chararray,t4:chararray,t5:chararray,t6:long,t7:long,t8:long,t9:long,t10:chararray );
step3: 查看A是否正确,命令:DUMP A ;
发现开始了一个 map-reduce 进程 ,耐心等待,出现结果
map-reduce进程完成 ,出现了我们想要的结果
step4: 使用迭代命令 foreach 抽取出要保留的字段
grunt> B=FOREACH A GENERATE t1,t6,t7,t8,t9;
grunt> DUMP B; //查看B 的结果是否和预期一样
结果正确,进行下一步;
step5: 使用 group by 命令 将B 中的结果 按手机号(t1)进行分组
grunt> C = group B by t1 ;
grunt> DUMP C ; //查看C 的结果是否正确
发现 同手机号的被合并成一个数组,符合预期,进行下一步
step6:对各流量(t6,t7,t8,t9)参数 进行求和
grunt> D = FOREACH C GENERATE group, SUM(B.t6), SUM( B.t7), SUM(B.t8), SUM(B.t9) ;
grunt> DUMP D;
//其中 变量 group 是指分组后的组名,即分组后手机号
结果正确
step 7: 将结果保存到hdfs中:
grunt> STORE D INTO '/PIG_RESULT';
可在hdfs 中查看: