导入猪脚本时出错
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 命令以上是关于导入猪脚本时出错的主要内容,如果未能解决你的问题,请参考以下文章