1
我無法在Pig中找到這個看似簡單的問題的解決方案。將行添加到Pig中的表中
我有一個表,看起來像:
(USA, "big",somevalue1)
(USA, "rich",somevalue2)
(RU, "big",somevalue3)
(BR, "rich",somevalue4)
(BR, "rich",somevalue5)
作爲輸出我想
(USA, "big",somevalue1)
(USA, "rich",somevalue2)
(RU, "big",somevalue3)
(RU, "rich",0)
(BR, "rich",somevalue4)
(BR, "rich",somevalue5)
(BR, "big",0)
即,使得每個國家共享相同的「信息」相對於第二列添加行,即使這意味着填充零未知值。
編輯
這是我想出瞭解決方案
USA "big" 1
USA "rich" 2
RU "big" 3
BR "rich" 4
BR "rich" 5
(輸入example.txt中)
A = LOAD 'example.txt' USING PigStorage('\t') AS (cty: chararray, prop:chararray, value: int);
B = FOREACH A GENERATE cty;
B = DISTINCT B;
C = FOREACH A GENERATE prop;
C = DISTINCT C;
D = CROSS B, C;
X = JOIN D BY (cty,prop) LEFT, A BY (cty,prop) using 'replicated';
K = FOREACH X GENERATE
B::cty AS cty,
C::prop AS prop,
(value is NULL ? 0 : value);
DUMP K;
預期其中給出:
(USA,"rich",2)
(USA,"big",1)
(RU,"rich",0)
(RU,"big",3)
(BR,"rich",4)
(BR,"rich",5)
(BR,"big",0)
我不知道默認的元組。在我的例子中,我不知道每個國家必須出現一套{「大」,「富」}。這個集合可能像{「big」,「rich」,「oil」}更大。我需要首先隔離「最大」集... – fricadelle
我不知道這是一個無限的值列表,而不僅僅是「大」和「富」。所以我編輯了我的答案,並詳細解決了您的問題。希望它能完成這項工作。 –