2014-10-07 279 views
1

有沒有人有豬過濾器工作不正常的問題。一般都是愚蠢的。豬過濾器不工作

作爲一個例子,我有一些看起來像這樣的日誌。

a1 

(2013-12-25 02:55:08,000085594,15468,80365991,1387940111723) 
(2013-12-25 02:55:08,000085594,63943,80365991,1387940111723) 
(2013-12-25 02:55:08,000085594,64014,80365991,1387940111723) 

decribe a1 

a1: {time:chararray, id:chararray, buckets::bucket: int, chararray, chararray) 

如果我嘗試過濾$ 2。我收到一個錯誤。

a2 = filter a2 by ($2 == 64034); 

我收到以下錯誤消息。錯誤1066:無法打開別名a2的迭代器。

我搞砸了這個相當多的東西,couln't弄明白。因此,如果數字匹配,我錯誤地返回了「是」或「否」的Python UDF。

@outputSchema('y:chararray') 
def bucket(bucket): 
    if bucket == '64034': 
     return "Yes" 
    else: 
     return "No" 

a3 = foreach a1 generate time, myfuncs.bucket($2), $3, $4; 

describe a3 
a3: {time:chararray, id:chararray, y:chararray, chararray, cararray} 

沒有,當我過濾這是工程。

a4 = filter a3 by ($2 == 'Yes'); 

這產生期望的結果。但是,我需要對其他UDF進行更多的數據轉換。這些UDF對列$ 2不做任何事情。他們只看1列和3列。當我在過濾器之前使用它們時,兩個UDF都可以工作。但是,如果我嘗試在過濾器後應用UDF,則會出現「無法打開別名」錯誤。另外,如果我在過濾器之前執行額外的UDF,然後應用過濾器 - 過濾器停止工作,並且出現「無法打開別名」錯誤。這些都不會改變2美元的模式。

那麼,這裏可能會發生什麼?一,爲什麼沒有過濾器原來的工作。二,爲什麼某些UDF工作,然後不工作似乎沒有邏輯。任何類型的故障排除方向都會有所幫助。

+0

對於誰發現這個職位尋找,當人們[錯誤1066:無法打開別名迭代器(http://stackoverflow.com/questions/34495085/error -1066-unable-to-open-iterator-for-alias-in-pig-generic-solution)這裏是[通用解決方案](http://stackoverflow.com/a/34495086/983722)。 – 2015-12-28 15:17:28

回答

1

看起來像a2尚未定義。更有可能的是,代碼應該如下:

a2 = filter a1 by ($2 == 64034);