导入猪脚本时出错

Posted

技术标签:

【中文标题】导入猪脚本时出错【英文标题】:Error while IMPORT Pig Script 【发布时间】:2015-05-01 18:32:01 【问题描述】:

要在每个猪拉丁脚本文件中设置的一组宏、jar 和属性。已将所有这些移至 common.pig。 目标是在所有 pig latin 文件中包含这个通用 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;

【问题讨论】:

请添加猪文件 @Mzf 添加 common 和 test_import pig 脚本 【参考方案1】:

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

阅读IMPORT Macro 表明不支持Grunt Shell command - 见下文

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

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

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

【讨论】:

谢谢,我知道 IMPORT 宏中不支持 grunt shell 命令,这包括实用命令 - SET 吗?当我们在我们正在导入的 common.pig 中单独使用 REGISTER 命令时观察到的行为也是如此,应该是这种情况吗? 我认为你不能在导入文件中使用 register 命令

以上是关于导入猪脚本时出错的主要内容,如果未能解决你的问题,请参考以下文章

PIG UDF 错误 - 可以使用导入解决

在 python 脚本上附加 MIME 时出错

使用 Pig 脚本将 Json 导入 Hbase

将文件 sql 导入 phpmyadmin 时出错超时?

导入 gradle 项目 Eclipse 时出错:找不到目标

导入带有可选链接的模块时出错