pig读取部分列 (全部列中的少部分列)

pig流式数据,load数据时,不能读入任意列。

但是,可以从头读,只能连续几列。就是前几列。比如10列数据,可以只读前3列。但不能读第3列:

如:数据testdata

[wizad@sr104 lmj]$ cat testdata.txt 

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

1,2,3,4,5,6,7,8,9,10

pigscript读入:

my = load '/home/wizad/lmj/testdata.txt' using PigStorage(',')

as(one:chararray,

two:int);



describe my;

dump my;

结果为

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

(1,2)

结构为

grunt> describe my;

my: {one: chararray,two: int}

只读入其中两列。

如果想读入任意列,可以使用piggybank提供的hivecolumnarloader自行开发。

pig是java编写的,所以也可以自己写java的UDF,实现load时的格式 加载函数loadfunc,逐行读入时,只留下其中任意列。就可以了。

如下两个

pig自身的:

DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();

自己编写的:

DEFINE SequenceFileLoader com.vpon.wizad.etl.pig.SequenceFileCSVLoader();

上一篇:Java知多少(46)try和catch的使用


下一篇:input/select/textarea标签的readonly效果实现