2016-05-17 72 views
1

我有一個文件,其中包含我想使用Pig查詢的人口普查信息。如何使用Pig循環使用唯一值

文件格式如下:

ID Name Year Gender State Count 

1 Jones 1980 M  MA 100 

我想這應該是國家對每個名字的百分比在該年每年的文件中

我怎麼能遍歷每個的年份,並計算每個州的每個名稱出現的百分比?

結果應該如下:

1901 Jones MA 2% 
    1901 Jones VT 3% 
    1901 Smith MA 1% 
    1901 Lee VT 4% 
    .... 
    .... 

    2016 Jones MA 2% 
    2016 Jones VT 3% 
    2016 Smith MA 1% 
    2016 Lee VT 4% 

每年在我需要通過州和每一個我需要計算給出的計數信息的每個名字的百分比州內進行分解表。

+0

可以請你發佈你期待 –

+0

修正原來的職位,包括我在尋找 – TheGoat

+0

比例是如何確定的結果,結果的格式,例如2%? –

回答

2

您將不得不按年份狀態生成另一個關係,按年份加入具有新關係的數據集,然後獲取百分比。

見下文。

A = LOAD 'census_data' USING PigStorage('\t') as (int:id,name:chararray,year:chararray,gender:chararray,state:chararray,int:count); 
B = GROUP A by (year,state); 
C = FOREACH B GENERATE FLATTEN(group) as (year,state),SUM(A.count) as occurances; 
D = JOIN A BY (year,state),C BY (year,state); 
E = FOREACH D GENERATE A::year,A::name,A::state,CONCAT(A::count/C::occurances,'%'); --If you get an error try A.year,A.name,A.state,CONCAT(A.count/C.occurances,'%'); 
DUMP E; 
+0

感謝inquisitive_mind,這是一個解決問題的非常聰明的方式。在第3行中,扁平的應該是A而不是組? – TheGoat

+0

@PigWolf不,它應該是爲組,因爲我們是A組的2個字段,然後我們希望字段從組中分裂。我沒有測試它,但邏輯應該可以幫助你獲得你想要的輸出 –