2012-12-20 65 views
1

我寫了一個Pig腳本,它將通過Python UDF執行一些圖像處理。豬 - 密鑰的多個值

做一些操作後,我有這樣的事情(例如):

A = load 'data.txt' using PigStorage('|') as (name:chararray, pixelIntensity:float); 

B = group A by pixelIntensity; 

dump B; 

B是則是這樣的:

(131.0,{(image1,jpg,131.0), (image2.jpg,131.0), (image3.jpg,131.0)}) 
(140.0,{(image5.jpg,140.0), (image5.jpg,140.0)}) 
(150.0,{(image4.jpg,150.0}) 

如果我去

dump A; 

我會得到以下內容:

(image1.jpg,131.0) 
(image2.jpg,131.0) 
(image3.jpg,131.0) 
(image4.jpg,150.0) 
(image5.jpg,140.0) 

所以我基本上用他們的平均像素密度作爲關鍵詞進行分組。

我的問題是這樣的:

我是否能夠從B中的每一行中僅提取1元?因此,舉例來說,我有一個像

(image1.jpg,131.0) 
(image4.jpg,150.0) 
... 
+1

我知道豬有限制的結構,雖然我不知道它可以一起使用GROUP BY ... – ryanbwork

回答

0

嵌套的FOREACHLIMIT應該做你想要什麼:

A = LOAD 'data' using PigStorage(',') AS (name:chararray,pixelIntensity:float); 
B = GROUP A BY pixelIntensity; 
C = FOREACH B { 
    D = LIMIT A 1; 
    GENERATE flatten(D); 
}; 
STORE C INTO 'res'; 
+0

非常感謝,弗雷德!這正是我一直在尋找的:) 請問請問嵌套'FOREACH'是如何工作的?從我看到的情況來看,你只能從A中選出最上面的條目,但爲什麼「扁平(D)」部分? – MikamiHero