pig入门学习

  • 时间:
  • 来源:互联网

个人目前理解pig是对mapreduce的一种封装扩展,使写mapreduce简单化,可维护性更高一点,可透明性更清晰一点,操作数据更简单一点吧。

 

1.      Pig中的模式
pig中模式就是说pig数据的数据格式是什么样的。

比如当执行

grunt> describe a;

a: {c1: int,c2:int,c3: int}

这个时候就证明知道数据是什么模式的,

grunt> describe b;

Schema for bunknown.

这个时候的模式就是未知的,

 

在这儿我想就应该可以看到有模式和无模式的数据提示了。

Pig的模式是非常宽松的,就像它的宣言‘什么都吃’,用户定义了模式,pig会使用这个模式,可以进行预先错误检查,和执行过程的优化等操作。但是如果用户没有指定模式,pig会做最合理的猜测。

 

2.      Pig数据结构
数据结构用来可以指定列的类型或者对象的类型

简单类型

描述

Example/声明实例

int

Signed 32-bit integer

10 

as(c1:int)

long

Signed 64-bit integer

Data:     10L or 10l

as(c1: long)

 

Display: 10L

float

32-bit floating point

Data:     10.5F or 10.5f or 10.5e2f or 10.5E2F
as(c1: float)

 

Display: 10.5F or 1050.0F

double

64-bit floating point

Data:     10.5 or 10.5e2 or 10.5E2
as(c1: double)

 

Display: 10.5 or 1050.0

as(c1: double)

chararray

Character array (string) in Unicode UTF-8 format

hello world
as(c1: chararray)

bytearray

Byte array (blob)

 as(c1: bytearray)默认

boolean

boolean

true/false (case insensitive)

datetime

datetime

1970-01-01T00:00:00.000+00:00

Complex Types复杂类型

 

 

tuple

An ordered set of fields.

(19,2)
as(a:tuple(),b:tuple(x:int,y:chararry))

bag

An collection of tuples.

{(19,2), (18,1)}
as(a:bag{},b:bag{x:int,y:chararray})

map

A set of key value pairs.

[open#apache]
as (a:map[],b:map[])

 

3.      数据类型转换
pig的数据类型的允许转换

from / to

bag

tuple

map

int

long

float

double

chararray

bytearray

boolean

bag

 

error

error

error

error

error

error

error

error

error

tuple

error

 

error

error

error

error

error

error

error

error

map

error

error

 

error

error

error

error

error

error

error

int

error

error

error

 

yes

yes

yes

yes

error

error

long

error

error

error

yes

 

yes

yes

yes

error

error

float

error

error

error

yes

yes

 

yes

yes

error

error

double

error

error

error

yes

yes

yes

 

yes

error

error

chararray

error

error

error

yes

yes

yes

yes

 

error

yes

bytearray

yes

Yes

yes

yes

yes

yes

yes

yes

 

yes

boolean

error

error

error

error

error

error

error

yes

error

 

参考:http://pig.apache.org/docs/r0.11.1/basic.html#cast

 

还有一些基础运算的操作在官方的参考手册中有好多的例子就不写了,原来写博文也很累~~~~(>_<)~~~~ ,现在感觉好羡慕那些一直坚持写了好多篇的NB人物们啊。
http://pig.apache.org/docs/r0.11.1/basic.html#artichmetic-ops



 Pig latin

Pig latin 是一种数据流语言,每个处理步骤都会产生一个新的数据集,或者一个新的关系。

一个Piglatin程序是由一组语句组成,一个语句可以理解是一个操作,或一个命令等。

 

Pig  latin中的变量是区分大小写的。比如所有的关系,和字段等都是区分的,但是pig中的保留字是不区分的。Load 和LOAD是一样的。

 

单行注释         --注释区 

多行注释/*注释区*/

 

语句

在Pig Latin程序执行时,每个命令按次序进行解析。如果遇到句法错误或其他

(语义)错误,例如未定义的别名,解释器会终止运行,并显示错误消息。解释器会

给每个关系操作建立一个逻辑计划。逻辑计划构成了Pig Latin程序的核心。解释

器把为一个语句创建的逻辑计划加到到目前为止已经解析完的程序的逻辑计划上,

然后继续处理下一条语句。

特别需要注意的是,在整个程序逻辑计划没有构造完成前,Pig并不处理数据。

 

 

函数

Pig中的函数有四种类型。

计算函数(Eval function)

    计算函数获取一个或多个表达式作为输入,并返回另一个表达式。MAX就是

    一个内置表达式的例子,它返回一个包中项的最大值。有些计算函数是“聚集

    函数”(aggregatefunction),这意味着它们作用于数据的“包”(bag),并产生

    一个标量值(scalarvalue) o  MAX就是一个聚集函数。此外,很多聚集函数是

     “代数相关的”(algebraic)。也就是说这些函数的结果可以增量计算。在

   MapReduce中,通过使用combiner进行计算,代数函数的计算效率可以提高

    很多。MAX是一个代数函数,而计算一组值

     “中位数”(median)的函数则不是代数函数。

过滤函数(Filter function)

    过滤函数是一类特殊的计算函数。这类函数返回的是逻辑布尔值。正如其名,

    过滤函数被FILTER操作用于移除不需要的行。它们也可以用于其他以布尔条

    件作为输入的关系操作,或用于使用布尔或条件表达式的表达式。IsEmpty

    就是内置过滤函数的一个例子。它测试一个包或映射是否包含有元素。

加载函数(Load function)

    加载函数指明如何从外部存储加载数据到一个关系。

存储函数(Store function)

    存储函数指明如何把一个关系中的内容存到外部存储。通常,加载和存储函数

    由相同的类型实现。例如,PigStorage从分隔的文本文件中加载数据,也能

    以相同的格式存储数据。

Pig内置的函数

类别

描述

计算

 

函数名称

描述

AVG

计算包中项的平均值

CONCAT

把两个字节数组或字符数组连接成一个

COUNT

计算一个包中非空值的项的个数

COUNTSTAR

计算一个包的项的个数,包括空值

DIFF

计算两个包的差。如果两个参数不是包,那么如果它们相同,则返回一个包含这两个参数的包;否则返回一个空的包

MAX

计算一个包中项的最大值

MIN

计算一个包中项的最小值

SIZE

计算一个类型的大小。数值型的大小总是1。对于字符数组,它返回字符的个数;对于字节数组,它返回字节的个数;对于容器(container,包括元组、包、映射)它返回其中项的个数

SUM

计算一个包中项的值的总和

TOKENIZE

对一个字符数组进行标记解析,并把结果词放入一个包

IsEmpty

判断一个包或映射是否为空

PigStorage

用字段分隔文本格式加载或存储关系。每一行被分为字段后(用一个可设置的分隔符(默认为一个制表符)分隔),分别对应于元组的各个字段。这是不指定加载/存储方式时的默认存储函数

BinStorage

从二进制文件加载一个关系或把关系存储到二进制文件
中。该函数使用基于Hadoop Writable对象的Pig内部格式

BinaryStorage

从二进制文件加载只包含一个类型为bytearray的字段的元组到关系,或以这种格式存储一个关系。bytearray中的字节逐字存放。该函数与Pig的流式处理结合使用

TextLoader

从纯文本格式加载一个关系。每一行对应于一个元组。每
个元组只包含一个字段,即该行文本。

PigDump

用元组的toString()形式存储关系。每行一个元组。这
个函数对设计很有帮助

HbaseStorage

从Hbase 加载数据

 pig中的关键字

A-Z排序

保留字

A

AND, ANY, ALL, ARRANGE, AS, ASC, AVG

 

 

B

BAG, BINSTORAGE, BY, BYTEARRAY

 

 

C

CACHE, CAT, CD, CHARARRAY, COGROUP, CONCAT, COPYFROMLOCAL, COPYTOLOCAL, COUNT, CP, CROSS

 

 

D

DATETIME, %DECLARE, %DEFAULT, DEFINE, DESC, DESCRIBE, DIFF, DISTINCT, DOUBLE, DU, DUMP

 

 

E

E, E, EVAL, EXEC, EXPLAIN

 

 

F

F, F, FILTER, FLATTEN, FLOAT, FOREACH, FULL

 

 

G

GENERATE, GROUP

 

 

H

HELP

 

 

I

IF, ILLUSTRATE, IMPORT, INNER, INPUT, INT, INTO, IS

 

 

J

JOIN

 

 

K

KILL

 

 

L

L, L, LEFT, LIMIT, LOAD, LONG, LS

 

 

M

MAP, MATCHES, MAX, MIN, MKDIR, MV

 

 

N

QNOT, NULL

 

 

O

ONSCHEMA, OR, ORDER, OUTER, OUTPUT

 

 

P

PARALLEL, PIG, PIGDUMP, PIGSTORAGE, PWD

 

 

Q

QUIT

 

 

R

REGISTER, RIGHT, RM, RMF, RUN

 

 

S

SAMPLE, SET, SHIP, SIZE, SPLIT, STDERR, STDIN, STDOUT, STORE, STREAM, SUM

 

 

T

TEXTLOADER, TOKENIZE, THROUGH, TUPLE

 

 

U

UNION, USING

 

 

V, W, X, Y, Z

 



 pig数据类型对应的java类

pig类型 java类
bytearray org.apache.pig.data.DataByteArray
chararray String
int Integer
long Long
float Float
double Double
tuple org.apache.pig.data.Tuple
bag org.apache.pig.data.DataBag
map Map<Object, Object>


本文链接http://element-ui.cn/news/show-576568.aspx