2014-08-05 pig

时间:2024-11-04 13:35:50

Pig的数据类型能够分为两种:一种是scalar类型,包含单一的value,一种是complex类型,包含有其他的类型。

对于scalar类型:

int,long,float,double,chararray(取代了string),bytecharray.

复杂点的类型:

1、Map(我用python编写的对应的map总是出现问题,纠结了好久还是没有纠结好~~~才纠结好)书上的介绍:map是chararray(作为key)与其他数据元素的映射关系(作为value),其他的数据元素的类型为pig支持的数据类型,也包括复杂的数据类型。因为Pig并不知道value的类型,所以它假定这个为bytearray类型,但是真是的类型可能不是这样的,如果你知道这个value的类型,或者你希望是某个类型,你可以强制转换(cast)它。如果你不转换,Pig会以它认为的类型来定义,书的后面也有写Pig如何处理它不知道的类型。默认的情况下,没有要求values的必须是同一种类型。Pig0.9之后,可以申请values为一种类型。

map的形式是:key,value之间由#隔开,每一对之间由逗号隔开,这些pairs由中括号括起来。

如:['name'#'bob', 'age'#55]。

记下我的程序:

          line = '';
regulation = regulations.split(',');
regulation.remove('');
for re in regulation:
line = line + re.replace(':', '#') + ',';
line = line[len(line) - 1:];
regulationMap = [line];

这个程序里面的regulationMap就可以当作一个map来使用了。

其他的:返回map,写成这种形式:@outputSchema("mapvalue: []"),在pig里面使用的时候用flatten。(后一个还没有仔细用。)

涉及到map的还有两个问题:1、在pig,python的udf里面能不能读文件,每次读文件,都出错?2、flatten之后的数据跟别的数据join之后又问题。这个也还没有解决。

用describe看一个变量数据:describe variableValue,可以知道其schema的组成。

注意:flatten之后的数据可以用$0,$1等等来代表其第几个schema。

map还有很多需要注意的地方,以后碰到再写。

2、Tuple: 是有序集合,能够被分为好几个fields,每一个field包含一个元素,这些元素可以是任意类型,可以不是相同的类型。可以同为下标进行访问。tuple里面的value可以跟相应的type进行关联。tuple形式:小括号,每个元素之间逗号:('b', 55),两个元素。

bag:

先不写了。

sql:

http://www.cnblogs.com/wang-123/archive/2012/01/05/2312676.html