标题:
Hadoop学习之Pig(2)
[打印本页]
作者:
look_w
时间:
2019-3-4 19:12
标题:
Hadoop学习之Pig(2)
三、Pig的使用实例
3.1 文件背景
结合本笔记第五篇《自定义类型处理手机上网日志》的手机上网日志为背景,我们要做的就是通过Pig Latin对该日志进行流量的统计。该日志的数据结构定义如下图所示:(该文件的下载地址为: )
5117213-baeb696d1d322d94.jpg
PS:在使用Pig之前先将该文件上传至HDFS中,这里上传到了/testdir/input目录中
hadoop fs -put HTTP_20130313143750.dat /testdir/input
3.2 Load:把HDFS中的数据转换为Pig可以处理的模式
(1)首先通过输入Pig进入grunt,然后使用Load命令将原始文件转换为Pig可以处理的模式:
grunt>A = LOAD '/testdir/input/HTTP_20130313143750.dat' AS (t0:long,msisdn:chararray, t2:chararray, t3:chararray, t4:chararray, t5:chararray, t6:long, t7:long, t8:long, t9:long, t10:chararray);
(2)通过Pig对指令的解析,帮我们转换成为了MapReduce任务:
(3)通过以下命令可以查看结果:
grunt>DUMP A;
3.3 FOREACH:把A中有用的字段抽取出来
(1)这里我们需要统计的只是手机号以及四个流量数据,因此我们通过遍历将A中的部分字段抽取出来存入B中:
grunt> B = FOREACH A GENERATE msisdn, t6, t7, t8, t9;
(2)通过以下命令可以查看结果:
grunt>DUMP B;
3.4 GROUP:分组数据
(1)有用信息抽取出来后,看到结果中一个手机号可能有多条记录,因此这里通过手机号进行分组:
grunt> C = GROUP B BY msisdn;
(2)通过以下命令可以查看结果:
grunt>DUMP C;
3.5 GENERATE:流量汇总
(1)在对手机号进行分组之后,我们可以看到某个手机号对应着多条流量记录数据,因此继续使用FOREACH遍历分组数据,然后对四个流量数据进行汇总,这里使用了聚合函数SUM():
grunt> D = FOREACH C GENERATE group, SUM(B.t6), SUM(B.t7), SUM(B.t8), SUM(B.t9);
(2)通过以下命令可以查看结果:
grunt>DUMP D;
3.6 STORE:将统计结果存储到HDFS中进行持久化
(1)在对流量统计完毕之后,结果仍然是在Pig中,这里就需要对其进行持久化操作,即将结果存储到HDFS中:
grunt> STORE D INTO '/testdir/output/wlan_result';
(2)通过HDFS Shell查看存储结果:
hadoop fs -text /testdir/output/wlan_result/part-r-*
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0