我是PIG的新手,我在java中编写了一个UDF并复制并使用以下命令用pig-version.jar编译java类(我使用的是pig-0.11.1和hadoop-1.2.1)。
>cd udfs
>java -cp $PIG_HOME/pig-0.11.1.jar UPPER.java
它提示我以下几行
注意:UPPER.java使用或覆盖已弃用的API。 注意:使用-Xlint重新编译:弃用以获取详细信息。
我虽然只是一个警告并为udfs文件夹构建了一个jar文件
>jar -cf udfs.jar udfs
然后我运行了以下猪脚本some.pig
REGISTER udfs.jar;
DEFINE udfs.UPPER();
A= load 'input' using PigStorage(',') as (fname:chararray,lname:chararray,age:int);
B = foreach A generate udfs.UPPER(fname);
store B into 'some-output3' using PigStorage(',');
我使用命令
运行脚本 >pig -x local some.pig
它给了我以下错误
Warning: $HADOOP_HOME is deprecated.
2014-02-22 12:50:28,524 [main] INFO org.apache.pig.Main - Apache Pig version 0.11.1 (r1459641) compiled Mar 22 2013, 02:13:53
2014-02-22 12:50:28,525 [main] INFO org.apache.pig.Main - Logging error messages to: /home/vamshi23/pig-area/pig_1393102228520.log
2014-02-22 12:50:28,985 [main] INFO org.apache.pig.impl.util.Utils - Default bootup file /root/.pigbootup not found
2014-02-22 12:50:29,273 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: file:///
2014-02-22 12:50:30,374 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <file some.pig, line 3, column 11> Syntax error, unexpected symbol at or near '.'
Details at logfile: /home/vamshi23/pig-area/pig_1393102228520.log
有人可以帮我解决这个问题吗?
谢谢你, Vamshi
答案 0 :(得分:1)
我认为问题可能在于您使用DEFINE。您对它的使用应如下所示:
DEFINE Upper udfs.UPPER();
第一部分是您稍后用于引用UDF的别名。
然后您可以像这样使用它:
B = foreach A generate Upper(fname);
请注意,Pig已经定义了UPPER UDF。我不确定这是否会引起冲突所以我改变了套管,我认为这样可以避免这种情况。
您还应该能够使用UPPER UDF而无需先定义它。只需删除调用DEFINE的行并使用您最初使用的行:
B = foreach A generate udfs.UPPER(fname);
有关详细信息,请查看有关UDF here的Pig文档。