pig 实验

任务目标:

目标一 : 每名学生被多少位老师教过

方法一 : 先DISTINCT, 在计数

- DISTINCT 能偶对所有数据去重

方法二 : 先分组

- FOREACH 嵌套

- 使用DISTINCT

首先创建一份数据源文件

[[email protected] ~]$ cat score.txt 
James,Network,Tiger,100
James,Database,Tiger,99
James,PDE,Yao,95
Vincent,Network,Tiger,95
Vincent,PDE,Yao,98
Vincent,PDE,
NocWei,PDE,Yao,100
[[email protected] ~]$ hadoop fs -put score.txt
[[email protected] ~]$ pig
grunt> A = LOAD ‘/score.txt‘ USING PigStorage(‘,‘) AS (student,course,teacher,score:int);
grunt> DESCRIBE A;
grunt> B = FOREACH A GENERATE student, teacher;                      #只提取student和teacher,其他的丢掉
grunt> DESCRIBE B;                                                   #查看B数据,会发现只有两个元祖
grunt> C = DISTINCT B;                                               #对B的数据去重
grunt> D = FOREACH ( GROUP C BY student ) GENERATE group AS student , COUNT(C);  
grunt> DUMP D

#结果
(James,2)
(NocWei,1)
(Vincent,3)
grunt>
grunt> E = group B by student;  
grunt> F = foreach E                                
>> {                                            
>> T = B.teacher;                               
>> uniq = DISTINCT T;                           
>> generate group as student,COUNT(uniq) as cnt;
>> }

目标二 : 找出每门课程最优秀的两名学生

步骤一: group by

- group by 的嵌套方法

步骤二: order by

- foreach嵌套

步骤三: limit

- 配合order by 使用

步骤四: flantten

- 去括号过程

grunt> A = LOAD ‘/score.txt‘ USING PigStorage(‘,‘) as (student,course,teacher,score:int);
grunt> dump A
(James,Network,Tiger,100)
(James,Database,Tiger,99)
(James,PDE,Yao,95)
(Vincent,Network,Tiger,95)
(Vincent,PDE,Yao,98)
(Vincent,PDE,,)
(NocWei,PDE,Yao,100)
grunt> B = FOREACH A GENERATE student,course,score;
grunt> dump B
(James,Network,100)
(James,Database,99)
(James,PDE,95)
(Vincent,Network,95)
(Vincent,PDE,98)
(Vincent,PDE,)
(NocWei,PDE,100)
grunt> C = group B by course
grunt> dump C
(PDE,{(NocWei,PDE,100),(Vincent,PDE,),(Vincent,PDE,98),(James,PDE,95)})
(Network,{(Vincent,Network,95),(James,Network,100)})
(Database,{(James,Database,99)})
grunt> D = FOREACH C                        
>> {                                    
>> sorted = ORDER B BY score DESC;      
>> top = LIMIT sorted 2;                
>> GENERATE group AS course, top AS top;
>> }
grunt> dump D
(Database,{(James,Database,99)})
(Network,{(James,Network,100),(Vincent,Network,95)})
(PDE,{(NocWei,PDE,100),(Vincent,PDE,98)})
grunt> E = FOREACH D GENERATE course,FLATTEN(top);                      #对输出格式去括号
grunt> dump E
(Database,James,Database,99)
(Network,James,Network,100)
(Network,Vincent,Network,95)
(PDE,NocWei,PDE,100)
(PDE,Vincent,PDE,98)
时间: 2024-10-25 18:42:54

pig 实验的相关文章

Pig安装与配置

---------------------------------- 一.前言 二.环境 三.配置 1.本地模式 2.MapReduce模式 四.测试 ---------------------------------- 一.前言 Pig是一个用来处理大规模数据集的平台,和Google的Sawzall类似,由Yahoo!贡献给Apache.MapReduce的查询矿街虽然主要是Map和Reduce两个函数,但是用户从编程写程序到在集群中部署.运行,仍然要花费不少时间.使用Pig可以简化MapRe

Hadoop(六)——子项目Pig

前边,讲述了Hadoop的两大支柱HDFS和MapReduce,我们通过将大数据的数据文件放在HDFS上,利用Java编写Map-Reduce,来实现数据的各种分析,并预测一些东西,实现大数据的商业价值,从而也体现了Hadoop价值所在. 但是反观传统系统中,我们都是通过数据库进行数据分析的,例如关系型数据库:Oracle,SQL Server,mysql等,更进一步的通过NO SQL数据库:mongoDB等.对于Hadoop大数据分析,我们如何能够快速而平滑的过度过来呢,以至于不会Java的也

Pig Latin儿童黑话(java)

 ●假设单词以辅音字母開始,将词首的辅音字母字符串(第一个元音字母前的全部字母)从单词的开头移动到末尾,然后加上后缀ay,这样就形成了它的pig  latin. ●假设单词以元音字母開始,仅仅须要加入后缀way就可以. 这里注意java中的分离思想,对于这样的问题,我们一眼想不出解决的方法的时候,我们就要把它分解成多个小问题: 对于这个问题: 首先,我们会想推断它的第一个字母是不是元音字母,引申为查找它的第一个元音字母的位置,找到就返回它的位置,在这里还有推断它是否是一个英语单词,假设是而且

Hadoop、Pig、Hive、NOSQL 学习资源收集

(一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blog.csdn.net/ruby97/article/details/7423088 http://blog.csdn.net/savechina/article/details/5656937 2.hadoop 伪分布式安装: http://www.thegeekstuff.com/2012/02/

Spring框架——关于IOC容器和注解的36个小实验

实验1:通过IOC容器创建对象,并为属性赋值★ <bean id="page" class="com.neuedu.Bean.Page"> <property name="fontSize" value="大写"></property> <property name="fontNum" value="12"></property>

Java AVL、BST编程作业代写、代做JDK实验

Java AVL.BST编程作业代写.代做JDK实验1 IntroductionNeeding a way to manage all your PlayStation friends, you decide to build a backendsystem for adding, removing and maintaining them. The idea is to organiseyour friends so you can search for individuals, search

java eclipse 作业代写、代做eclipse实验

java eclipse 作业代写.代做eclipse实验<java程序设计>课程实验报告 实验四 继承与多态一.实验目的及要求1.了解如何使用类及其成员的修饰符,掌握方法的继承.重载和覆盖.2.掌握类的继承关系和派生方法.3.掌握多态的概念与使用. 4.掌握接口的定义与使用.二.实验内容(一)类的继承性练习1.进一步理解继承的含义 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改.新类还可添加新的变量和方法.这种现象就称为类的继承. 当建立一个新类时,不必写出全

如何使用GNS3和Cisco IOU搭建路由交换实验-IOU篇

前面介绍了GNS3的概念,安装,配置和使用,本篇将介绍怎么利用GNS3配置IOU从而实现使用GNS3和Cisco IOU搭建路由交换实验. 由于本篇篇幅较长,所以先过一下大纲: 1. IOU模拟环境介绍 2. IOU软件环境的准备 3. VMware虚拟机的安装.导入和配置 4. IOU镜像的上传 5. GNS3的配置 6. IOU模拟环境的实现 IOU模拟环境介绍 IOU即IOS running in Unix,最初是由思科内部人员开发来测试IOS的平台,后来流传到互联网经网友改进有了后来的W

广外第二周的实验报告来这里分享一下

虽然有很多还不知道怎么改,可能也有很多测试不到的地方,但是通过这个星期我好歹了解了好多东西啊 实验报告 通过本次学习,能了解到VC6.0.是用于将已生成的C++语言源程序代码转换为计算机能读懂的目标代码,计算机用的均是二进制代码.编辑完成后它首先生成扩展名为obj的文件(程序编译后的二进制文件),若想进行之后的链接.运行过程,必须不断修改源程序文件至完全正确. 在文件→新建→源代码这里可以新建源代码:新建→打开项目或文件中可以打开以前写过的源代码或者程序:运行→编译中即把所打源文件转换为二进制代