2011-11-22 26 views
2

我有兩個豬關係。第一個count_pairs顯示了一對單詞和它們被看到的次數。 ex ((car,tire), 4)。第二個是word_counts,它跟蹤每個單詞被看到的次數。 (car, 20)。我希望找到每對看到多少次的百分比,而不是看到第一個單詞的次數。在我們的情況下,我想要((car,tire), 4/20)。我試着寫一個嵌套的foreach來解決這個問題:在PIG中使用嵌套FOREACH過濾器

> percent_count_pairs = FOREACH count_pairs { 
> denom = FILTER word_counts BY ($0 ==count_pairs.pair.word1); 
> GENERATE pair, count2/(double)denom.$1;} 

我不斷收到此錯誤:

'Pig script failed to parse: 
<file src/cluster.pig, line 27, column 15> expression is not a project expression: (Name: ScalarExpression) Type: null Uid: null)' 

這一點與FILTER行; 使用谷歌搜索這個錯誤並沒有導致我對任何有用的東西。請幫忙! (PS。如果我採取與FILTER行出的foreach這樣做工作...)

+0

難道你不能用ORDER和LIMIT命令獲得同樣的結果嗎? – ElKamina

回答

2

更多谷歌上搜索我才明白,這是一個豬錯誤,將不允許在此之後: https://issues.apache.org/jira/browse/PIG-1798。我最終編寫了自己的UDF進行過濾。

+0

酷嵌套FOREACH解決方案,我也很好奇,你有沒有嘗試過JOIN?例如像這樣:pairs_word_counts = JOIN word_counts BY word,count_pairs BY pair.word1; pair_ratio = FOREACH pairs_word_counts GENERATE count_pairs :: pair, count_pairs :: pair.count/word_counts :: count; – Romain