java程序员的大数据之路(14):Pig Latin
结构
一个Pig Latin程序由一组语句构成,一个语句可以理解为一个操作,或一个命令。语句必须以分号结束。
Pig Latin有两种注释方法,双减号表示单行注释。多行注释可以使用/* 和 */表示。
语句
在Pig Latin程序执行时,每个命令按次序进行解析。如果遇到句法或语义错误,解释器会终止运行,并显示错误消息。解释器会给每个关系操作建立一个逻辑计划。逻辑计划是Pig Latin程序的核心。在逻辑计划构造完成前,Pig并不会处理数据。
Pig Latin关系操作
类型 | 操作 | 描述 |
---|---|---|
加载与存储 |
LOAD STORE DUMP |
将数据从文件系统或其他存储中加载数据,存入关系 将一个关系放到文件系统或其他存储中 将关系打印到控制台 |
过滤 |
FILTER DISTINCT FOREACH…GENERATE STREAM SAMPLE |
从关系中删除不需要的行 从关系中删除重复的行 从关系中增加或删除字段 使用外部程序对关系进行变换 从关系中随机取样 |
分组与连接 |
JOIN COGROUP GROUP CROSS |
连接两个或多个关系 在两个或更多关系中对数据进行分组 在一个关系中对数据进行分组 获取两个或更多关系的乘积 |
排序 |
ORDER LIMIT |
根据一个或多个字段对某个关系进行排序 将关系的元组个数限定在一定数量内 |
合并与分割 |
UNION SPLIT |
合并两个或多个关系 把某个关系切分两个或多个关系 |
Pig Latin的诊断操作
操作 | 描述 |
---|---|
DESCRIBE | 打印关系的模式 |
EXPLAIN | 打印逻辑和物理计划 |
ILLUSTRATE | 使用生成的输入子集逻辑计划的试运行结果 |
Pig Latin UDF语句
语句 | 描述 |
---|---|
REGISTER | 在Pig运行时环境中注册一个JAR文件 |
DEFINE | 为UDF,流式脚本或命令规范新建别名 |
表达式
Pig Latin表达式
类型 | 表达式 | 描述 | 示例 |
---|---|---|---|
常数 | 文字 | 常量值 | 1.0,’a’ |
字段(通过位置指定) | $n | 第n个字段(以0为基数) | $0 |
字段(通过名字指定) | f | 字段名f | year |
投影 | c.$n,c.f | 在容器c(关系、包或元组)中的字段 | records.$0,records.year |
Map查找 | m#k | 在映射m中键k所对应的值 | items’Coat’ |
类型转换 | (t)f | 将字段f转换为类型t | (int)year |
算术 |
x+y,x-y x*y,x/y x%y +x,-x |
加法和减法 乘法和除法 取模运算,即x除以y后的余数 正和负 |
$1 + $2,$1 - $2 $2 * $2,$2 / $2 $2 % $2 +1,-1 |
条件 | x?y:z | 二值条件三元运算符,如果x为真,则y,否则为z | quantity == 0?0:1 |
比较 |
x==y,x!=y x > y,x < y x>=y,x<=y x matches y x is null x is not null |
相等和不等 大于和小于 大于等于和小于等于 正则表达式匹配 是空值 不是空值 |
quantity == 0,temperature != 9999 quantity > 0, quantity < 10 quantity>=1,quantity<=9 quantity matches ‘[01459]’ temperature is null temperature is not null |
布尔型 |
x or y x and y not x |
逻辑或 逻辑与 逻辑非 |
q == 0 or q == 1 q == 0 and q == 1 not q matches ‘[01459]’ |
函数型平面化 |
fn(f1,f2,…) FLATTEN(f) |
在f1,f2等字段上应用函数fn 从包和元组中去除嵌套 |
isGood(quantity) FLATTEN(group) |
类型
Pig Latin数据类型
类别 | 数据类型 | 描述 | 文字示例 |
---|---|---|---|
数值 |
int long float double |
32位有符号整数 64位有符号整数 32位浮点数 64位浮点数 |
1 1L 1.0F 1.0 |
文本 | chararray | UTF-16格式字符数组 | ‘a’ |
二进制 | Bytearray | 字节数组 | 不支持 |
复杂类型 |
tuple bag map |
任何类型的字段序列 元组的无需多重集合 一组键-值对。键必须是字符数组,值可以是任何类型的数据 |
(1,’pomegranate’) {(1,’pomegranate’),(2)} {‘a’ ‘pomegranate’} |
需要注意的是:不能根据包文字直接创建一个关系。也不能把元组的一个字段投影为一个关系。
函数
Pig中函数有四种类型
- 计算函数
- 过滤函数
- 加载函数
- 存储函数
计算函数不需要过多解释,过滤函数是用于移出不需要的行。加载函数指明如何从外部存储加载数据到一个关系。存储函数指明如何把一个关系中的内容存到外部存储,如PigStorage。Pig内置函数可以在官网查询。
如果没有需要的函数,也可以自己去写自定义函数。后面我们会详细介绍用户自定义函数。
java程序员的大数据之路(14):Pig Latin相关推荐
- java程序员的大数据之路(13):Pig入门
Pig简介 Pig为大型数据集的处理提供了更高层次的抽象. Pig包括两部分: 用于描述数据流的语言,称为Pig Latin. 用于运行Pig Latin程序的执行环境.当前有两个环境:单JVM中的本 ...
- java程序员的大数据之路(3):用maven构建Hadoop项目
背景 由于Hadoop项目多数是比较大的项目,因此我们选择使用构建工具来构建Hadoop项目,这里我们使用的是maven.当然也可以使用Gradle等比较流行的构建工具 构建过程 这里总结一下我使用I ...
- java程序员的大数据之路(1):Hadoop安装
Hadoop伪分布式安装 从今天开始我会在这里记录在大数据学习方面的方法和遇到的一些问题. 首先从最著名的开源平台Hadoop开始学习.参考安装教程,这个教程比较全面,按照步骤一步步安装即可. 安装时 ...
- java程序员的大数据之路(12):Hadoop的守护进程
关键属性 Hadoop守护进程的关键属性大多标记为final,使作业的配置无法覆盖. 典型的core-site.xml配置文件 <?xml version="1.0"> ...
- java程序员的大数据之路(9):MapReduce的类型
概述 Hadoop的MapReduce中,map和reduce函数遵循如下常规格式: map:(K1,V1) -> list(K2,V2) reduce:(K2,list(V2)) -> ...
- java程序员的大数据之路(2):创建第一个Hadoop程序
环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...
- java程序员的大数据之路(15):Pig Latin用户自定义函数
过滤函数 所有的过滤函数都要继承FilterFunc类,并且实现抽象方法exec(),该方法的返回类型为Boolean. 示例代码如下: package com.udf.filter;import o ...
- java程序员的大数据之路(8):MapReduce的工作机制
概述 Hadoop运行作业时的整个过程如果所示. 包含如下4个独立的实体. 客户端:提交MapReduce作业. jobtracker:协调作业的运行.它的主类是JobTracker. tasktra ...
- java程序员的大数据之路(7):基于文件的数据结构
SequenceFile 介绍 由于日志文件中每一条日志记录是一行文本.如果想记录二进制类型,纯文本是不合适的.这种情况下,Hadoop的SequenceFile类非常合适.SequenceFile可 ...
最新文章
- 一文览尽ToF深度相机技术
- Wireshark抓包与常见问题解决
- Slack设置根据关键字自动提醒的小技巧
- 深刻理解:C#中的委托、事件
- Java多线程sleep和wait的区别,总结得非常好
- 0101代码构成了计算机语言,计算机(全国一级考试)理论复习要点、模拟题.doc
- c语言格式化知识点(sscanf)
- logcat不显示信息
- “七大属性加持,三个全新升级组件”这个高性能利器有点厉害
- springboot获取Spring容器中的bean(ApplicationContextAware接口的应用)避免过多的或不用if..else,switch
- ITIL配置管理流程设计
- 小车--雷神、velodyne 雷达使用(IP)
- 计算机控制系统烤箱温度控制,图说恒温烘箱温度控制系统的设计分析
- 微信公众号敏感词检测工具
- CAD交互绘制虚线(网页版)
- 项目管理工具之Kanban
- [pillow]透明图片和不透明图片叠加合成--添加透明度
- css背景图做水印,css给图片添加水印的方法
- 性能测试面试题总结(答案全)
- JavaSwing_3.2: JScrollPane(滚动面板)