2013-06-25 54 views
1

我無法從一個foreach中調用宏,例如無法調用一個foreach塊

DEFINE valid_attribute(id,attribute) 
    RETURNS result { 
      data  =  LOAD '/user/sathish/sessAttr' AS (id:chararray,browser_version:chararray); 
     filtered_data  = FILTER data BY id == '$id' AND $attribute is NOT null; 
     $result   = foreach filtered_data generate $attribute; 
    }; 

    ip = load '/user/sathish/macros/inputParams' AS (id:chararray,attribute:chararray); 
    op = foreach ip {generate valid_attribute('ip::id','ip:attribute');}; 
    dump op; 

我收到呼叫同一時以下異常中豬宏:

2013-06-25 04:47:42,239 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve valid_attribute using imports: [, org.apache.pig.builtin., org.apache.pig.impl.builtin.] 

回答

4

您不能以這種方式使用宏。一個宏返回一個關係(表),而不是一個單獨的值。 GENERATE是爲了在你的關係中產生個人價值。您使用宏的方式看起來像是在嘗試使用UDF,這就是爲什麼Pig會在其默認類路徑中查找函數的原因,就像它對於任何UDF一樣。

+0

感謝您的回覆,如果我要寫一個UDF,我該如何比較我的輸入參數與UDF與我試圖加載的整個數據集? – sathishs

+0

我不遵循你的問題,但看着你的腳本,我想你可能正在嘗試做類似於'JOIN'的事情?在訴諸UDF之前,看看你是否能在Pig Latin中完成你想要做的事情。 –

+0

ya我們可以在Pig Latin中做同樣的事情,這裏的屬性是一個列名,並且場景是我們必須對多個列執行相同的過程,這會導致編寫多個聯接語句。因此,試圖將代碼模塊化爲可用於n列的函數。 – sathishs

相關問題