取本地数据_一只猪能让大数据文件飞起来

1a1e630ed0130349eff6e146170598dd.png

1,PIG 简介

每一个技术的产生都是对实现问题的一种反馈:人与人的互联,物与物的互通,人与物的交互的言行动作都产生了很多数据,这些数据对于企业却是弥足珍贵的,在物质充裕的时代,数据信息才是石油。

于是Hadoop大数据生态出现了,基于MapReduce的核心思想构建集群来处理大数据。Pig做为生态的一部分出现在我们的眼前:它在MapReduce的基础上创建了更简单的过程语言抽象,为Hadoop应用程序提供了一种更加接近结构化查询语言(SQL)的接口。

PIG的本地模式能方便的让我们处理本地的大文本文件,比如上百万行的数据Excel有心无力,pig可以;复杂的多值嵌套的数据Excel很费劲,pig很轻松。不需要去用Java去写复杂的Map Reduce代码,pig轻松的语言化处理过程。

pig:经典思路是一大拆多小,一层变多层,让文本数据模式化,处理起来更高效,几行程序可以出上TB的数据。

2,PIG在MAC上的安装

PIG包含两部分:1,用于描述数据流的语言,称为Pig Latin;2,用于Pig Latin程序执行的环境。(单JVM的本地坏境和Hadoop集群上的分布式环境)。

pig内部的一系列操作与变换都被转换成一系列的Map Reduce,是探索大规模数据集的脚步语言,五六行代码就可以处理TB级的数据

运行方式:脚本/GRUNT/嵌入

安装如下:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果报错,可以先下载:文件 brew_install.rb,然后控制台运行ruby brew_install.rb;修改镜像为国内,可以提升下载速度。

 brew install pig

安装完成后:

#进入本地模式,开启处理大文件之旅
pig -x local 

3,pig基础运用

3.1 模拟一个文本数据-student.txt

文件中包含:科目,学生姓名,成绩;我们从处理这个文件中来一起学习pig的入门操作。

7118ddba1bf7f1956eb61e47396b9863.png

2,基本操作

load 数据文件的载入,并用PigStorage来指定列的分隔符,用as 进行模式声明:字段名/类型。

student = load '/Users/my_pig/student.txt' using PigStorage(',')
 as (subject:chararray, name:chararray, score:int);

# 来查看数据模式
describe student

e0bc932bdc11a1baf2007482c9caa38d.png

上面模式输出,我们可以看出类似数据表的结构,student是一个表名,有三字段:subject,name,score;每一个字段都有指定好的类型。方便我们后续的加工处理分析。

简单的操作:过滤,分组,取最大最小值,大家可以不断扩张自己的操作能力。

filter_subject = FILTER student by subject=='语文';
#查看结果集
dump filter_subject;

7045f094c2bb31674b4d42d2888cd925.png
#分组:通过科目
group_subject = group filter_subject by subject;
#查看结果集-将多行数据-分组后变成一行
dump group_subject;

7b5635539ceb363f50a8e77bfd9e694d.png

基于group_subject分组后的数据,我们才可以最聚合计算操作,也就是说数据的模式中需要包含group信息。

max_min_score = foreach group_subject generate group, MAX(filter_subject.score), MIN(filter_subject.score);
#查看结果集
dump max_min_score
#保存结果成为一个文件
store max_min_score into 'yuwen_score' using PigStorage(',');

f90c762f2dfe63b9ef41a86600c831ae.png

3,高级链接操作

典型的内连接(inner join)操作

inner_student  = join student by $0, max_min_score by $0;
#查看结果集
dump inner_student;
--
(语文,小7白,122,语文,122,120)
(语文,小6白,120,语文,122,120)
(语文,小4白,120,语文,122,120)
(语文,小3白,120,语文,122,120)
(语文,小白,120,语文,122,120)
(语文,小一白,120,语文,122,120)
(语文,小2白,120,语文,122,120)

外连接(outer join)的操作,可以指定 LEFT OUTER或者 OUTER

outer_student  = join  student by $0 LEFT OUTER, max_min_score by $0;
#查看结果集 
dump outer_student;

fe99669950b80308584487d4e25f75b2.png

还有Cross操作,形成两个数据集的“交叉相乘”,形成数据的笛卡尔积。

cross_student  = CROSS student, max_min_score

还有cogroup, flatten,union,排序等操作。

4,QA与总结

Pig看上去和SQL很相似,但有几点不同:

Pig是一种数据流编程语言,一步一步的操作,上一步的输出可以做为下一步的输入,将问题分成连贯的小步,不断逼近我们想要的数据结果,符合我们人类的工作习惯。而SQL是一种声明式的编程语言,是完整的约束集合,是一起提交运行的。

关系数据库对数据存储有严格的模式定义,不如整型的数据列不能存字符。而Pig对它处理的数据模式要求比较宽松。

pig 对复杂,多值嵌套的数据结构的支持也不同于只能处理平面数据类型的SQL。但是SQL是支持在线低延迟的查询,pig主要集中在离线的批数据处理。

结合不同场景,选择二者,我们的工作才能事半功倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值