IMPORT Pig Script时出错

时间:2015-05-01 18:32:02

标签: import apache-pig

要在每个pig latin脚本文件中设置的一组宏,jar和属性。将所有这些都移到了common.pig。 目的是将这种常见的猪锉包含在所有猪拉丁文件中。

尝试Invoke Pig Latin script from other Pig script

中建议的以下方法

方法1 :使用RUN,按预期工作。

            Usage : RUN  common.pig;

方法2 :使用IMPORT会导致错误。

            Usage : IMPORT 'common.pig';

            Error message :

            ERROR 1200: <file common.pig, line 1, column 0>  Syntax error, unexpected symbol at or near 'SET'

                org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1000: Error during parsing. <file common_macro.pig, line 1, column 0>  Syntax error, unexpected symbol at or near 'SET'
                    at org.apache.pig.PigServer$Graph.parseQuery(PigServer.java:1608)
                    at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1547)

我试图理解为什么第二种方法失败了。我对IMPORT的理解是它将导入的文件直接写入pig脚本而不是IMPORT语句,如果是这种情况,理想情况下它不应该抛出上述错误。

对此有任何意见或想法。

同样从代码模块化/可维护性/执行角度来看,最好在上面的用例中使用EXEC或RUN命令来调用common.pig文件。

文件:

common.pig

SET job.priority HIGH;
-- SET few others ...;

REGISTER snappy-java-1.0.4.1.jar;
-- REGISTER piggybank, avro and other required jars

test_import.pig

IMPORT 'common.pig';

A = load 'test/part*' USING  org.apache.pig.piggybank.storage.avro.AvroStorage();
DUMP A;

1 个答案:

答案 0 :(得分:3)

SET在导入文件中不受支持。

阅读IMPORT Macro不支持Grunt Shell command的节目 - 见下文

  

用法使用IMPORT命令将单独文件中定义的宏导入Pig脚本。

     

IMPORT将宏定义添加到Pig Latin命名空间;这些   然后可以调用宏,就好像它们是在同一个文件中定义一样。

     

宏只能包含Pig Latin语句; Grunt shell命令是   不支持。