2013-06-27 30 views
1

對不起,這個尷尬的標題。我想在這裏做的是對諸如關係:將兩個元組中的兩個數字分開放在一個包中

{group: chararray,G: {(query: chararray,type: chararray,count: long)}} 

這是「按組」一個一個的結果,每個鍵至多有2元組,通過「類型」來區分。例如。一個示例可能看起來像:

{group:'abc', G:{('abc', 'A', 10), ('abc', 'B', 20)} 

現在,我想爲每個組中,執行(計數在「A」)的數學/(計數在「B」)。我對豬很新,並嘗試過不同的方式,但無法做到正確。任何建議?有些事情我想:

I = group G by query; 
J = foreach I { 
CC=filter G by type=='A'; 
VV=filter G by type=='B'; 
--generate group, (float)(FLATTEN(CC.count))/(float)(FLATTEN(VV.count)) as CTR, CC, VV ; 
--or generate group, (float)(FLATTEN(CC.count))/FLATTEN(VV.count), CC.count, VV.count; 
--or generate group, CC.count/VV.count, CC.count, VV.count; 

}

無工作。

回答

3

如果你對你的數據有任何先決條件,比如「每個鍵最多有2個元組」,那麼我建議不要使用GROUP,這不是爲了處理你的想法。相反,你可以在SPLIT你的數據集在兩個,然後JOIN件重新組合。這樣你可以保持每個鍵的元組都是筆直的。例如:

SPLIT G INTO typeA IF type == 'A', typeB IF type == 'B'; 
I = JOIN typeA BY query, typeB BY query; 
J = FOREACH I GENERATE typeA::query, (float)typeA::count/typeB::count; 
相關問題