1.介绍Apache Pig读取数据和存储数据
Apache Pig通常在Hadoop之上工作。Pig是一个分析工具,用于分析Hadoop文件系统中存在的大型数据集。 但是,我们必须首先将数据加载到Apache Pig中,以便使用Apache Pig分析数据。 为此,我们使用Load运算符。 之后,使用Store 运算符,可以将加载的数据存储在文件系统中。
2.Load
Load Operator从文件系统加载数据:
语法:
1. LOAD 'data' [USING function] [AS schema];
命令解释
'data'
单引号表示文件或目录的名称。
一旦我们指定了目录名称,目录中的所有文件都会被加载
USING
如果省略USING子句,则使用缺省装入函数PigStorage
Function
加载函数
我们可以使用内置函数。基本上,PigStorage是默认的加载功能。不需要指定(简单地省略USING子句)。但是,如果我们的数据的格式不能由内置函数处理,那么我们可以编写自己的加载函数
AS
关键词
schema结构信息
通常,用括号括起来,使用AS关键字的模式
Schema指定加载器生成的数据的类型。取决于加载程序,如果数据不符合模式,则有两种可能性,即生成空值或错误。要注意,由于性能的原因,加载器可能不会立即将数据转换为指定的格式。尽管如此,仍然可以对假定指定类型的数据进行操作。
用法
要从文件系统加载数据,我们使用LOAD运算符。
示例
假设我们有一个名为file1.txt的数据文件。 这些字段以制表符分隔。 而且,这些记录是以换行符分隔的。
1 2 3 4 2 1 8 3 4
这里,默认加载函数PigStorage从file1.txt加载数据以形成关系A.另外,两个LOAD语句是等价的。 但是,请注意,这些字段未命名,并且所有字段都默认为bytearray,因为没有指定模式。
1.A = LOAD 'file1.txt'; 2.A = LOAD 'file1.txt' USING PigStorage('\t'); 3.DUMP A; (1,2,3) (4,2,1) (8,3,4)
这里使用AS关键字指定了一个模式。 而且,这两个LOAD语句是相同的。 而且,为了查看模式,我们也可以使用DESCRIBE和ILLUSTRATE运算符。
1.A = LOAD 'file1.txt' AS (f1:int, f2:int, f3:int); A = LOAD 'file1.txt' USING PigStorage(‘\t’) AS (f1:int, f2:int, f3:int); 2.DESCRIBE A; 3.a: {f1: int,f2: int,f3: int} 4.ILLUSTRATE A;
3.Store
STORE运算符,将结果存储或保存到文件系统。
语法
1. STORE alias INTO 'directory' [USING function];
命令解释
Alias
relation的名称
INTO
关键字
'Directory'
目录的名称。 但是,如果该目录已存在,则STORE操作将失败。
名为part-l的输出数据文件将写入此目录。
USING
关键词
如果省略USING子句,则使用缺省存储函数PigStorage。
Functoin
使用内置函数。PigStorage是默认的store功能。
但是,如果我们的数据的格式不能由内置函数处理,那么我们可以编写自己的存储功能。
Usage
为了运行Pig latin语句,我们使用STORE运算符。 另外,为了将结果保存到文件系统中,使用Store.
注意:我们可以使用DUMP来检查中间结果,以便在开发期间调试脚本。
示例
通过使用PigStorage和星号字符(*)作为字段分隔符,存储数据。
1.A = LOAD 'data' AS (a1:int,a2:int,a3:int); 2.DUMP A; (1,2,3) (4,2,1) (8,3,4) (4,3,3) (7,2,5) (8,4,3) 1.STORE A INTO 'output1' USING PigStorage ('*'); 2.CAT output1; 1*2*3 4*2*1 8*3*4 4*3*3 7*2*5 8*4*3
在数据存储之前可以操作数据,如使用CONCAT函数:
1.B = FOREACH A GENERATE CONCAT('a:',(chararray)f1), CONCAT('b:',(chararray)f2), CONCAT('c:',(chararray)f3); 2.DUMP B; (a:1,b:2,c:3) (a:4,b:2,c:1) (a:8,b:3,c:4) (a:4,b:3,c:3) (a:7,b:2,c:5) (a:8,b:4,c:3) 1.STORE B INTO 'output1' using PigStorage(','); 2.CAT output1; a:1,b:2,c:3 a:4,b:2,c:1 a:8,b:3,c:4 a:4,b:3,c:3 a:7,b:2,c:5 a:8,b:4,c:3