gpt4 book ai didi

apache-pig - 在嵌入式 pig 程序中执行具有多个商店的 pig 脚本文件

转载 作者:行者123 更新时间:2023-12-01 12:51:23 26 4
gpt4 key购买 nike

我想在嵌入式 pig 程序中执行一个 pig 脚本文件,如下所示

----testPig.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");

但它不工作。我已经在 grunt-shell 模式下检查过了。那里工作正常。所以我做了这样的改变

---testPig.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");

现在修改后的代码可以正常工作了。所以现在我的疑问是

  1. 为什么我无法执行具有存储命令的 pig 脚本?

  2. 如何执行带有存储命令的 pig 脚本文件?

最佳答案

您的 PigServer 代码无法正常工作,因为;当您调用 .registerScript() 时,默认情况下,PigServerGruntParser 上的交互模式标志设置为 false。来自 PigServer 源代码:

public void registerScript(InputStream in, Map<String,String> params,List<String> paramsFiles) throws IOException {
try {
String substituted = doParamSubstitution(in, params, paramsFiles);
GruntParser grunt = new GruntParser(new StringReader(substituted));
/********************************************/
grunt.setInteractive(false);
/********************************************/
grunt.setParams(this);
grunt.parseStopOnError(true);
} catch (org.apache.pig.tools.pigscript.parser.ParseException e) {
log.error(e.getLocalizedMessage());
throw new IOException(e.getCause());
}
}

引用自 GruntParser 源代码:

In interactive mode, executes the plan right away whenever a STORE command is encountered.

这意味着当交互模式未激活时,STORE命令将被忽略(即它们不会自动运行)直到进一步PigServer.openIterator PigServer.store 调用(即您显式调用需要 STORE 行)。

关于你的第二个问题,你可能想看看PigRunner类。

关于apache-pig - 在嵌入式 pig 程序中执行具有多个商店的 pig 脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com