无法使用Pig udf

时间:2014-02-22 20:56:17

标签: apache-pig

我是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

1 个答案:

答案 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文档。