Board logo

标题: 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