2014-07-03 51 views
1

我是新來的豬。我在豬身上寫了一個UDF,並將其用於我的豬腳本。但它給了以下錯誤Udf的豬的錯誤

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve UserDefined.PartsOfSpeech using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 

這裏是我的UDF代碼

public String exec(Tuple input) throws IOException { 
     //my code here 
    } 

這裏是我的豬腳本

REGISTER /home/bigdata/NetBeansProjects/UserDefined/dist/UserDefined.jar   
a = load '/user/bigdata/json' using TextLoader() as (input:chararray);    
b = foreach a GENERATE UserDefined.PartsOfSpeech(input); 

在上面的代碼用戶自定義爲我的包名和PartsOfSpeech是我的課名稱

回答

0

錯誤消息說豬找不到UserDefined.PartsOfSpeech

package什麼package PartsOfSpeech.java聲明在文件的頂部?

如果包聲明package com.my.company;試試這個來代替:

REGISTER /home/bigdata/NetBeansProjects/UserDefined/dist/UserDefined.jar   
a = load '/user/bigdata/json' using TextLoader() as (input:chararray);    
b = foreach a GENERATE com.my.company.PartsOfSpeech(input); 

也就是說,com.my.company.PartsOfSpeech(input)更換UserDefined.PartsOfSpeech(input)因爲UDF位於包com.my.company

另外,考慮在您的Pig腳本中使用DEFINE關鍵字,因此每次使用PartsOfSpeech時都不需要重複com.my.company

DEFINE PartsOfSpeech UserDefined.dist.PartsOfSpeech(); 
REGISTER /home/bigdata/NetBeansProjects/UserDefined/dist/UserDefined.jar   
a = load '/user/bigdata/json' using TextLoader() as (input:chararray);    
b = foreach a GENERATE PartsOfSpeech(input); 

有關於DEFINE在阿蘭·蓋茨的編程豬的第5章的詳細信息:http://chimera.labs.oreilly.com/books/1234000001811/ch05.html#udf_define

以下是蓋茨的書DEFINE一個例子:

--define.pig 
register 'your_path_to_piggybank/piggybank.jar'; 
define reverse org.apache.pig.piggybank.evaluation.string.Reverse(); 
divs  = load 'NYSE_dividends' as (exchange:chararray, symbol:chararray, 
      date:chararray, dividends:float); 
backwards = foreach divs generate reverse(symbol); 
0

編譯你的UDF(Java類)之前,請確保您已正確提到的包名。例如,如果您提到包名 -

package com.pig.udf;

這意味着你需要照顧你的linux系統中的目錄。

你可以遵循以下提到的步驟來創建JAR -

使用

mkdir -p com/pig/udf 

創建包com.pig你的java類創建目錄。使用命令UDF

編譯Java源代碼

javac -cp /usr/lib/pig-0.12.0.2.0.6.0-76.jar YourClass.java 

然後去要現在創建JAR目錄 -

cd ../../.. 

現在,使用以下命令來創建JAR

jar -cvf yourJarName.jar com/ 

在你的腳本中使用關鍵字「register」註冊jar,後跟path e罐子 現在使用您的罐子關鍵字com.pig.udf.YourJavaClassName 爲您的scenerio -

REGISTER /home/bigdata/NetBeansProjects/UserDefined/dist/UserDefined.jar   
a = load '/user/bigdata/json' using TextLoader() as (input:chararray);    
b = foreach a GENERATE com.pig.udf.PartsOfSpeech(input);