2017-04-14 56 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