我想在嵌入式pig程序中执行一个pig脚本文件,如下所示
----测试Pig。Pig-----
A = load '/user/biadmin/student' using PigStorage() as (name:chararray);
B = foreach A generate name;
store B into '/user/biadmin/myoutput001';
为此,我编写了如下代码
> PigServer pigServer = new PigServer(ExecType.MAPREDUCE);
> pigServer.registerScript("testPig.pig");
但它不工作。我已经在咕噜shell模式下检查过了。它在那儿工作得很好。所以我做了这样的改变
---测试Pig。Pig-----
A = load '/user/biadmin/student' using PigStorage() as (name:chararray);
B = foreach A generate name;
--store B into '/user/biadmin/myoutput001';
嵌入的pig代码是
> PigServer pigServer = new PigServer(ExecType.MAPREDUCE,prt);
> pigServer.registerScript(path);
> pigServer.store("B","/user/biadmin/myoutput20");
现在修改后的代码运行良好。所以现在我的疑问是
为什么我不能执行有store命令的pig脚本?
如何执行有store命令的pig脚本文件?
1条答案
按热度按时间jtjikinw1#
你的
PigServer
代码不起作用,因为;当你打电话的时候.registerScript()
,默认情况下,PigServer
将交互模式标志设置为打开GruntParser
至false
. 从PigServer
源代码:引用
GruntParser
源代码:在交互模式下,每当遇到store命令时,立即执行计划。
这意味着当交互模式未激活时,
STORE
命令将被忽略(即它们不会自动运行),直到下一步PigServer.openIterator
或者PigServer.store
调用(即您显式地调用需要STORE
行)。至于你的第二个问题,你可能想看看pigrunner类。