2013-06-26 61 views
0

標題可能有點混亂,所以我會展示我想達到的目標。將結果數據用於其他數據過濾器Hadoop Pig。

所以說我有一個數據只是int。

10 
20 
30 
40 
50 
60 
70 
80 
90 

和數據被稱爲data.csv什麼

,所以我做

A = load 'data.csv' using PigStorage(','); 

,它會加載到一個

,然後我用這個數據,計算它的平均值。

我做

B = foreach A generate int; 
C = group B all; 
avg = foreach C generate AVG(B.int); 

(忽略小的語法錯誤,你明白了吧)

所以,如果我平均傾倒,我會得到代表數據A.平均一個整數

所以,現在我想要做的是

篩選出來的數據只具有比平均水平的數據。

因此,像這樣

X = filter A by int > avg 

但它不喜歡我使用的數據變量的過濾器比較。

我應該如何實現這一目標?

回答

2

生成的原始數據,平均一起,然後進行過濾:

A = load 'data.csv' using PigStorage(','); 
B = foreach A generate int; 
C = group B all; 
D = foreach C generate FLATTEN(B.int), AVG(B.int) AS avg; 
E = filter D by int > avg; 

關係D將您所有的原始行與追加爲第二場的平均值。

+0

投影字段[avg]在模式中不存在:這就是我得到的.. – JaemyeongEo

+0

如果你描述D,它會說什麼? –

+0

哦,我得到它的工作。它不喜歡E = filter D通過int> avg,因爲它不知道平均值是什麼,所以我只是把它改成了D.avg,它工作。感謝WinnieNicklaus! – JaemyeongEo

相關問題