Pig Latin
加载数据
LOAD 运算符,从文件系统(HDFS / Local)将数据加载到Apache Pig中。
在左侧,需要提到我们想要存储数据的关系的名称;而在右侧,我们需要定义如何存储数据。
Relation_name = LOAD 'Input file path' USING function as schema;
function - 我们必须从Apache Pig提供的一组加载函数中选择一个函数( BinStorage,JsonLoader,PigStorage,TextLoader )。
Schema - 我们必须定义数据的模式,可以定义所需的模式如下 -
(column1 : data type, column2 : data type, column3 : data type);
例子:
student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt'
USING PigStorage(',')
as ( id:int, firstname:chararray, lastname:chararray, phone:chararray,
city:chararray );
存储数据
你可以使用 store 运算符将加载的数据存储在文件系统中
STORE Relation_name INTO ' required_directory_path ' [USING function];
例子:
STORE student INTO ' hdfs://localhost:9000/pig_Output/ ' USING PigStorage (',');
诊断运算符
Pig Latin提供四种不同类型的诊断运算符:
Dump运算符
Describe运算符
Explanation运算符
Illustration运算符
Dump 运算符用于运行Pig Latin语句,并在屏幕上显示结果,它通常用于调试目的。
Dump Relation_Name
describe 运算符用于查看关系的模式。
Describe Relation_name
explain 运算符用于显示关系的逻辑,物理和MapReduce执行计划。
explain Relation_name;
illustrate 运算符为你提供了一系列语句的逐步执行。
illustrate Relation_name;
Group运算符
GROUP 运算符用于在一个或多个关系中对数据进行分组,它收集具有相同key的数据。
Group_data = GROUP Relation_name BY age;
按多列分组
group_multiple = GROUP student_details by (age, city);
你可以按所有的列对关系进行分组,
group_all = GROUP student_details All;
Cogroup运算符
COGROUP 运算符的运作方式与 GROUP 运算符相同。两个运算符之间的唯一区别是 group 运算符通常用于一个关系,而 cogroup 运算符用于涉及两个或多个关系的语句。
cogroup_data = COGROUP student_details by age, employee_details by age;
Join运算符
JOIN 运算符用于组合来自两个或多个关系的记录。
连接可以是以下类型:
Self-join
Inner-join
Outer-join − left join, right join, and full join
Relation3_name = JOIN Relation1_name BY key, Relation2_name BY key ;
outer_left = JOIN customers BY id LEFT OUTER, orders BY customer_id;
outer_right = JOIN customers BY id RIGHT, orders BY customer_id;
outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;
CROSS 运算符计算两个或多个关系的向量积。(就是每个与另一个的所有组合)
Relation3_name = CROSS Relation1_name, Relation2_name;
Union运算符
UNION 运算符用于合并两个关系的内容。要对两个关系执行UNION操作,它们的列和域必须相同。
Relation_name3 = UNION Relation_name1, Relation_name2;
Split运算符
SPLIT 运算符用于将关系拆分为两个或多个关系。
SPLIT student_details into student_details1 if age<23, student_details2 if (22
25);
Filter运算符
FILTER 运算符用于根据条件从关系中选择所需的元组。
filter_data = FILTER student_details BY city == 'Chennai';
DISTINCT 运算符用于从关系中删除冗余(重复)元组。
distinct_data = DISTINCT student_details;
Foreach运算符
FOREACH 运算符用于基于列数据生成指定的数据转换。
Relation_name2 = FOREACH Relatin_name1 GENERATE (required data);
foreach_data = FOREACH student_details GENERATE id,age,city;
Order By运算符
Relation_name2 = ORDER Relatin_name1 BY (ASC|DESC);
order_by_data = ORDER student_details BY age DESC;
Limit运算符
Result = LIMIT Relation_name required number of tuples;
limit_data = LIMIT student_details 4;
Eval函数
各种内置函数
加载和存储函数
PigStorage() 加载和存储结构化文件。
STORE student INTO ' hdfs://localhost:9000/pig_Output/ ' USING PigStorage (',');
TextLoader() 是一个Load函数,用于以UTF-8格式加载非结构化数据。
BinStorage()函数
STORE student_details INTO 'hdfs://localhost:9000/pig_Output/mydata' USING BinStorage();
result = LOAD 'hdfs://localhost:9000/pig_Output/b/part-m-00000' USING BinStorage();