2017-04-14 63 views
0

数据模式:sdesc:chararray,samt:init,syear:chararrary,stype:chararrary猪 - 存储临时VALUES

数据:

Wrench 259000 2000 store 
Wrench 135000 2000 online 
Wrench 175000 2001 online 
Wrench 180000 2001 store 

脚本

ysales =LOAD ‘salesdata.txt’ using PigStorage()as (sdesc:chararray,samt:init,syear:chararrary,stype:chararrary); 
basedata = FILTER ysales by (sdesc==’Wrench’) and (syear = ‘2000’) and (stype = ‘store); 

我的结果集为:DUMP basedata;

(Wrench,259000,2000,store) 

所以,问题是我怎么分手basedata有(例如)A = ‘Wrench’ B = 259000, C=2000, D = ‘store’

+0

什么是A,B,C,d?它会只存储一个值吗?如果过滤的记录超过1条记录,那么在那种情况下,必须将哪些记录存储在A,B,C,D中? –

+0

为了回答你的问题,从结果集中,有没有办法将“扳手”存储在c中的'2000'中的25900和d中的'存储器'中换句话说,分解结果集并将它们存储在临时变量 – Derez

回答

0

您可以使用参数号根据列中提取值

a = foreach basedata generate $0; 
b = foreach basedata generate $1; 
c = foreach basedata generate $2; 
d = foreach basedata generate $3; 
0

data = load '/home/satish/wrench' using PigStorage(' ') as (name,total,year,type) ;

//如果你想使用你可以使用过滤器

reqdata = foreach data generate CONCAT('A','=',name) as A, CONCAT('B','=',total) as B, CONCAT('C','=',year) as C,CONCAT('D','=',type) as D; 

dump reqdata;

(A=Wrench,B=259000,C=2000,D=store) (A=Wrench,B=135000,C=2000,D=online) (A=Wrench,B=175000,C=2001,D=online) (A=Wrench,B=180000,C=2001,D=store)

fdata = foreach reqdata generate A,B;

dump fdata

(A=Wrench,B=259000) (A=Wrench,B=135000) (A=Wrench,B=175000) (A=Wrench,B=180000)

,如果你想删除的元组\使用FLATTEN

+0

我正在寻找Flatten。我将发布结果 – Derez

+0

sales2000 = LOAD'retailsales.txt'使用PigStorage() AS(sdesc:chararray,samt:int,syear:chararray,stype:chararray) ; basedesc = FILTER sales2000 by syear =='2000'AND sdesc =='Retail and food services sales total'; basedes2000 = FOREACH basedesc generate $ 0; basesamt = FOREACH basedesc生成$ 1; basesyear = FOREACH basedesc生成$ 2; basestype = FOREACH basedesc生成$ 3; DUMP basedes2000; DUMP basesyamt; 转储基地年; DUMP basestype; – Derez