首页 > 技术文章 > 使用 Apache Pig 处理数据6

jsunday 2014-06-15 18:35 原文

Pig Latin 是一个相对简单的语言,它可以执行语句。一调语句 就是一个操作,它需要输入一些内容(比如代表一个元组集的包),并发出另一个包作为其输出。一个 就是一个关系,与表类似,您可以在关系数据库中找到它(其中,元组代表行,并且每个元组都由字段组成)。

Pig Latin 编写的脚本往往遵循以下特定格式,从文件系统读取数据,对数据执行一系列操作(以一种或多种方式转换它),然后,将由此产生的关系写回文件系统。您可以在 清单 1 中看到该模式的最简单形式(一个转换)。

Pig 拥有大量的数据类型,不仅支持包、元组和映射等高级概念,还支持简单的数据类型,如 intlongfloatdoublechararraybytearray。如果使用简单的类型,您会发现,除了称为 bincond 的条件运算符(其操作类似于 C ternary 运算符)之外,还有其他许多算术运算符(比如 addsubtractmultiplydividemodule)。并且,如您所期望的那样,还有一套完整的比较运算符,包括使用正则表达式的丰富匹配模式。

所有 Pig Latin 语句都需要对关系进行操作(并被称为关系运算符)。正如您在 清单 1 中看到的,有一个运算符用于从文件系统加载数据和将数据存储到文件系统中。有一种方式可以通过迭代关系的行来 FILTER 数据。此功能常用于从后续操作不再需要的关系中删除数据。另外,如果您需要对关系的列进行迭代,而不是对行进行迭代,您可以使用 FOREACH 运算符。FOREACH 允许进行嵌套操作,如 FILTERORDER,以便在迭代过程中转换数据。

ORDER 运算符提供了基于一个或多个字段对关系进行排序的功能。JOIN 运算符基于公共字段执行两个或两个以上的关系的内部或外部联接。SPLIT 运算符提供了根据用户定义的表达式将一个关系拆分成两个或两个以上关系的功能。最后,GROUP 运算符根据某个表达式将数据分组成为一个或多个关系。表 1 提供了 Pig 中的部分关系运算符列表。

表 1. Pig Latin 关系运算符的不完整列表
运算符描述
FILTER 基于某个条件从关系中选择一组元组。
FOREACH 对某个关系的元组进行迭代,生成一个数据转换。
GROUP 将数据分组为一个或多个关系。
JOIN 联接两个或两个以上的关系(内部或外部联接)。
LOAD 从文件系统加载数据。
ORDER 根据一个或多个字段对关系进行排序。
SPLIT 将一个关系划分为两个或两个以上的关系。
STORE 在文件系统中存储数据。

虽然这不是一个详尽的 Pig Latin 运算符清单,但该表提供了一套在处理大型数据集时非常有用的操作。您可以通过 参考资料 了解完整的 Pig Latin 语言,因为 Pig 有一套不错的在线文档。现在尝试着手编写一些 Pig Latin 脚本,以了解这些运算符的实际工作情况。

推荐阅读