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();