前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一只猪让大数据飞起来

一只猪让大数据飞起来

作者头像
herain
发布2022-04-27 19:04:46
2610
发布2022-04-27 19:04:46
举报
文章被收录于专栏:数据指象

1,Pig 简介

每一个技术的产生都是对实现问题的一种反馈,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级的数据

安装如下:

代码语言:javascript
复制
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

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

代码语言:javascript
复制
brew install pig
安装完成后:
#进入本地模式,开启处理大文件之旅
pig -x local

3,Pig基础运用

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

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

2,基本操作

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

s

代码语言:javascript
复制
tudent = load '/Users/my_pig/student.txt' using PigStorage(',')
as (subject:chararray, name:chararray, score:int);

# 来查看数据模式
describe student

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

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

代码语言:javascript
复制
filter_subject = FILTER student by subject=='语文';#查看结果集dump filter_subject;
代码语言:javascript
复制
#分组:通过科目
group_subject = group filter_subject by subject;
#查看结果集-将多行数据-分组后变成一行
dump group_subject;

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

代码语言:javascript
复制
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(',');

3,高级链接操作

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

代码语言:javascript
复制
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

代码语言:javascript
复制
outer_student  = join  student by $0 LEFT OUTER, max_min_score by $0;
#查看结果集 
dump outer_student;

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

代码语言:javascript
复制
cross_student  = CROSS student, max_min_score

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

4,QA与总结

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据指象 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1,Pig 简介
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档