2013-01-11 44 views
0

在Hadoop我有很多看起來像這樣的: (item_id,owner_id,counter) - 可能有重複,但總是item_id有相同的owner_idHadoop Pig GROUP by id,get owner_id?

我想要得到的counter的總和每個item_id,所以我有以下腳本:

alldata = LOAD '/path/to/data/*' USING D; -- D describes the structure 
known_items = FILTER alldata BY owner_id > 0L; 
group_by_item = GROUP known_data BY (item_id); 
data = FOREACH group_by_item GENERATE group AS item_id, OWNER_ID_COLUMN_SOMEHOW, SUM(known_items.counter) AS items_count; 

的問題是,在FOREACH,如果我想利用known_items.owner_id - 這將是一個元組有所有分組item_id的總和。獲得第一個業主的最有效方式是什麼?

回答

1

最簡單的解決方案爲您提供了正確的答案,如果你的假設,即每個item_id具有相同owner_id是正確的,會讓你知道,如果它是不是:incude的owner_id作爲組的一部分。

alldata = LOAD '/path/to/data/*' USING D; -- D describes the structure 
known_items = FILTER alldata BY owner_id > 0L; 
group_by_item = GROUP known_data BY (item_id, owner_id); 
data = FOREACH group_by_item GENERATE FLATTEN(group), SUM(known_items.counter) AS items_count; 
+0

按照定義,每個item_id都是一樣的。謝謝你的解決方案,我會測試一下。 – ddinchev

+0

同樣的定義,但你永遠不知道是否有什麼地方變得混亂,以至於你的數據不符合你的期望。 :) –