Hadoop-Pig常用函数介绍
1.Pig简介:
Pig在这个地方并不是指“猪”(我也不知道这个开发者的命名是什么想法),是指的一种数据处理工具,常用于配合Hadoop使用,用于处理大数据的分析与处理(数据批处理)。
因为Pig有一套专属的语法(与MySQL类似),所以相比于MapReduce来说,更适合做一些复杂度不高的数据筛选处理工作,只需要简单几行命令就可以获得可能几百行MapReduce代码带来的收益。
2.Pig表达式
类别 | 描述 | 示例 |
---|---|---|
常数 | 就类似于编程语言中的常量(字符串,整数等等) | “abc”, 1, 1.5 |
属性(名字指定) | 取一个集合的属性(类似取MySQL数据某一行的某一个字段) | .name |
属性(位置指定) | 取一个集合的属性(按照顺序取某一行) | .$1 |
属性(消除歧义) | 在JOIN之后属性可能会有歧义,使用该方式取属性 | ::name |
类型转换 | 强制类型转换 | float(“1.22”) |
算术 | 数学运算 | x+y,x-y,x*y,x/y,x%y |
三木运算符 | 参考编程语言三目运算符 | (x == 1)?x:0 |
比对 | 逻辑比较符号 | ==,!=,>,<,>=,<=,matches,is,is not |
逻辑连接 | 参考MySQL的逻辑连接 | AND OR NOT |
3.Pig数据类型
类别 | 类型 | 描述 | 示例 |
---|---|---|---|
数值 | int | 32位有符号整数 | 1 |
数值 | long | 64位有符号证书 | 1L |
数值 | float | 32位浮点数 | 1.0F |
数值 | double | 64位浮点数 | 1.0 |
字符串 | chararray | UTF-16格式字符串 | “abcdefg” |
二进制流 | bytearray | 字符数组 | |
结构类型 | tuple | 参考MySQL的一行数据(元组) | (1, 2, “abc”) |
结构类型 | bag | 参考MySQL的多行数据 | {(1,2),(3,4)} |
结构类型 | map | 类似json(键必须是字符串) | [‘xingming’#’luoxuan’] |
4.Pig常用函数
数据准备:
test_input 内容如下(各字段之间默认以\t分割):
luoxuan 170 150
gongmengnan 160 130
chenxiaolong 165 150
luoxuan 175 150
test_score内容如下(各字段之间默认以\t分割):
luoxuan 100 100 90
gongmengnan 40 50 80
chenxiaolong 80 80 70
4.1加载函数
LOAD AS : 加载数据并按照格式进行封装,传递值到变量中
Exp:
A = LOAD 'test_input' AS (name: chararray, height: int, weight: double);
4.2输出函数
4.2.1 DUMP:
输出变量内容
Exp:
DUMP A;
结果如下:
(luoxuan, 170, 150)
(gongmengnan, 160, 130)
(chenxiaolong, 165, 150)
(luoxuan, 175, 150)
4.2.2 STORE INTO:
将内容输出到文件里面
Exp:
STORE C INTO 'output';
4.2.3 DESCRIBE:
查看变量数据结构
Exp:
DESCRIBE A;
A: {
name: chararray,height: int,weight: int}
4.2.4 ILLUSTRATE:
查看示例(随机选取一条记录进行查看)
Exp:
ILLUSTRATE A;
A | name:chararray | height:int | weight:int |
---|---|---|---|
gongmengnan | 160 | 130 |
pig会在当前目录下新建output(必须之前不存在)文件夹,把结果放到文件夹下面
4.3数组操作函数
4.3.1 FOREACH GENERATE:
遍历数组每一项并获取对应字段(类似select a, b, c from table)
Exp:
FOREACH A GENERATE name;
luoxuan
gongmengnan
chenxiaolong
luoxuan
4.3.2 JOIN:
连接两个包数据(参考MySQL INNER JOIN,必须数据类型相同才能作为连接的字段)
Exp:
A = LOAD '/user/hadoop/test_pig_data/test_input' AS (name:chararray, height:int, weight:int);
B = LOAD