【问题标题】: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 脚本

标签: import apache-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 命令
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多