Apache pig 在嵌入式pig程序中使用多个存储执行pig脚本文件

Apache pig 在嵌入式pig程序中使用多个存储执行pig脚本文件,apache-pig,Apache Pig,我想在嵌入式pig程序中执行一个pig脚本文件,如下所示 > PigServer pigServer = new PigServer(ExecType.MAPREDUCE); > pigServer.registerScript("testPig.pig"); ----猪----- 为此,我编写了如下所示的代码 > PigServer pigServer = new PigServer(ExecType.MAPREDUCE); > pigServer.registerS

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

> PigServer pigServer = new PigServer(ExecType.MAPREDUCE);
> pigServer.registerScript("testPig.pig");
----猪-----

为此,我编写了如下所示的代码

> PigServer pigServer = new PigServer(ExecType.MAPREDUCE);
> pigServer.registerScript("testPig.pig");
但它不起作用。我已经在grunt shell模式下检查过了。在那里,它工作得很好。 所以我做了这样的改变

---猪-----

这方面的嵌入式pig代码是

> PigServer pigServer = new PigServer(ExecType.MAPREDUCE,prt);
> pigServer.registerScript(path);
> pigServer.store("B","/user/biadmin/myoutput20");
现在修改后的代码运行良好。 所以现在我的怀疑是

  • 为什么我无法执行包含store命令的pig脚本?

  • 如何执行包含store命令的pig脚本文件?


  • 您的
    PigServer
    代码不工作,因为;调用
    .registerScript()
    时,默认情况下,
    PigServer
    GruntParser
    上的交互模式标志设置为
    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());
        }
    }
    
    public void registerScript(InputStream-in、映射参数、列表参数文件)引发IOException{
    试一试{
    字符串替换=doParamSubstitution(in、params、paramsFiles);
    GruntParser grunt=新的GruntParser(新的StringReader(已替换));
    /********************************************/
    grunt.setInteractive(false);
    /********************************************/
    grunt.setParams(本);
    grant.parseStopOnError(true);
    }catch(org.apache.pig.tools.pigscript.parser.parsee){
    log.error(例如getLocalizedMessage());
    抛出新IOException(例如getCause());
    }
    }
    
    引用
    GruntParser
    源代码:

    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());
        }
    }
    
    在交互模式下,每当遇到STORE命令时,立即执行计划

    这意味着,当交互模式未处于活动状态时,
    STORE
    命令将被忽略(也就是说,它们不会自动运行),直到进一步调用
    PigServer.openIterator
    PigServer.STORE
    调用(也就是说,您明确地调用时需要
    STORE
    行)


    至于你的第二个问题,你可能想看看课堂。

    谢谢你的回答。。。现在我明白了原因,但如何解决这个问题??我在pig.jar文件中没有找到PigRunner.class;否则它就不会有,也不会在里面,对吗?:)我的是旧版本。。我在新版《猪》中发现了这门课……**谢谢大家**很高兴你们把它整理好了;记住要接受关于StackOverflow的问题的正确答案。。但是让我来看看第一班的猪倌。如果有效,那么只有我可以接受rt?