2017-04-14 26 views
0

データスキーマ:sdesc:chararray,samt:init,syear:chararrary,stype:chararraryPIG - STORING一時的な値

データ:

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

、B、C、Dは何ですが?FLATTEN使用1つの値だけを格納しますか?フィルタリングされたレコードが1レコード以上で、その場合はA、B、C、Dに何を保存する必要がありますか? –

+0

あなたの質問に答えるには、結果セットから、レンチをaに、25900をbの '2000'に、cを 'store'に '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)

\あなたはタプルを削除したい場合は

+0

私はFlattenを見ていました。結果は投稿します – Derez

+0

sales2000 = LOAD 'retailsales.txt' USING PigStorage() AS(sdesc:chararray、samt:int、syear:chararray、stype:chararray) ; basedesc = SYEARによるフィルタsales2000 == '2000' AND sdesc == '小売・食品サービスの売上高の合計'; basedes2000 = FOREACH basedesc $ 0生成; basesamt = FOREACH basedesc $ 1生成; basesyear = FOREACH basedesc $ 2生成します。 basestype = FOREACHベースのエスケープは$ 3を生成します; DUMPベース2000; ダンプ塩基; DUMPベース。 DUMPベースタイプ。 – Derez

関連する問題