结构

一个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相关推荐

  1. java程序员的大数据之路(13):Pig入门

    Pig简介 Pig为大型数据集的处理提供了更高层次的抽象. Pig包括两部分: 用于描述数据流的语言,称为Pig Latin. 用于运行Pig Latin程序的执行环境.当前有两个环境:单JVM中的本 ...

  2. java程序员的大数据之路(3):用maven构建Hadoop项目

    背景 由于Hadoop项目多数是比较大的项目,因此我们选择使用构建工具来构建Hadoop项目,这里我们使用的是maven.当然也可以使用Gradle等比较流行的构建工具 构建过程 这里总结一下我使用I ...

  3. java程序员的大数据之路(1):Hadoop安装

    Hadoop伪分布式安装 从今天开始我会在这里记录在大数据学习方面的方法和遇到的一些问题. 首先从最著名的开源平台Hadoop开始学习.参考安装教程,这个教程比较全面,按照步骤一步步安装即可. 安装时 ...

  4. java程序员的大数据之路(12):Hadoop的守护进程

    关键属性 Hadoop守护进程的关键属性大多标记为final,使作业的配置无法覆盖. 典型的core-site.xml配置文件 <?xml version="1.0"> ...

  5. java程序员的大数据之路(9):MapReduce的类型

    概述 Hadoop的MapReduce中,map和reduce函数遵循如下常规格式: map:(K1,V1) -> list(K2,V2) reduce:(K2,list(V2)) -> ...

  6. java程序员的大数据之路(2):创建第一个Hadoop程序

    环境 Ubuntu 16.04 + Hadoop 2.7.4 + Intellij idea 2017.2 + jdk 1.8 创建过程 新建工程 新建一个工程 输入工程名 可以随便给工程起一个名字, ...

  7. java程序员的大数据之路(15):Pig Latin用户自定义函数

    过滤函数 所有的过滤函数都要继承FilterFunc类,并且实现抽象方法exec(),该方法的返回类型为Boolean. 示例代码如下: package com.udf.filter;import o ...

  8. java程序员的大数据之路(8):MapReduce的工作机制

    概述 Hadoop运行作业时的整个过程如果所示. 包含如下4个独立的实体. 客户端:提交MapReduce作业. jobtracker:协调作业的运行.它的主类是JobTracker. tasktra ...

  9. java程序员的大数据之路(7):基于文件的数据结构

    SequenceFile 介绍 由于日志文件中每一条日志记录是一行文本.如果想记录二进制类型,纯文本是不合适的.这种情况下,Hadoop的SequenceFile类非常合适.SequenceFile可 ...

最新文章

  1. 一文览尽ToF深度相机技术
  2. Wireshark抓包与常见问题解决
  3. Slack设置根据关键字自动提醒的小技巧
  4. 深刻理解:C#中的委托、事件
  5. Java多线程sleep和wait的区别,总结得非常好
  6. 0101代码构成了计算机语言,计算机(全国一级考试)理论复习要点、模拟题.doc
  7. c语言格式化知识点(sscanf)
  8. logcat不显示信息
  9. “七大属性加持,三个全新升级组件”这个高性能利器有点厉害
  10. springboot获取Spring容器中的bean(ApplicationContextAware接口的应用)避免过多的或不用if..else,switch
  11. ITIL配置管理流程设计
  12. 小车--雷神、velodyne 雷达使用(IP)
  13. 计算机控制系统烤箱温度控制,图说恒温烘箱温度控制系统的设计分析
  14. 微信公众号敏感词检测工具
  15. CAD交互绘制虚线(网页版)
  16. 项目管理工具之Kanban
  17. [pillow]透明图片和不透明图片叠加合成--添加透明度
  18. css背景图做水印,css给图片添加水印的方法
  19. 性能测试面试题总结(答案全)
  20. JavaSwing_3.2: JScrollPane(滚动面板)

热门文章

  1. 国内外安全设备厂商资料收集中
  2. MAC新手教程:几步教你如何在搜狗输入法中使用斗图?
  3. 内存管理 -- 快表 TLB (Translation Look-aside Buffers)
  4. EasyWeChat微信开放平台第三方平台接入流程
  5. 学霸们都在用的论文科研工具,接好了!
  6. 基于脉搏波的疾病诊断:准确率接近100%的未来前景?
  7. 你写的项目管理周报有没有灵魂?【管理有度6】
  8. app架构图,330页PDF,10万字的知识点总结,全网独家首发!
  9. kotlin的Map集合
  10. Linux文本处理自定义,Linux中文本处理命令sed的使用示例分享