【问题标题】:Invoke Pig Latin script from other Pig script从其他 Pig 脚本调用 Pig Latin 脚本
【发布时间】:2014-01-05 07:47:24
【问题描述】:

我有一个关于 PIG 拉丁语的问题。有什么方法可以从另一个猪脚本中调用一些猪脚本吗?

我知道可以运行用户定义函数 (UDF),例如:

REGISTER myudfs.jar;
A = LOAD 'student_data' AS (name: chararray, age: int, gpa: float);
B = FOREACH A GENERATE myudfs.UPPER(name);
DUMP B;

但它不适用于猪脚本。我们正在计算一些不同的客户参数,并且为了可读性和重用性,加载一些猪 sn-ps 会很棒,例如:

REGISTER somepigscript.pig;
LOAD somepigscript.pig;

你知道有没有这样的功能?或者任何UDF?

谢谢你,祝你有美好的一天......

【问题讨论】:

    标签: hadoop user-defined-functions apache-pig


    【解决方案1】:

    您可以将宏用于此类事情: http://pig.apache.org/docs/r0.11.1/cont.html#macros

    【讨论】:

    • 这不是正确的答案。宏确实可以重用某些代码,但它们与在另一个脚本中运行整个 Pig 脚本不同。
    【解决方案2】:

    Pig 有两个命令,RUNEXEC。它们的不同之处在于RUN 将执行Pig 脚本并保留其别名和属性以供后续使用,而EXEC 只是执行脚本并在调用环境不变的情况下返回(但在HDFS 上创建的任何新文件都可用)。

    例如,我有一组宏、jar 和属性,我想在我编写的每个脚本的开头设置它们。我没有每次都输入它们,而是将其放入 Pig 脚本并在脚本开头调用 RUN /my/script.pig

    【讨论】:

    • 非常感谢温妮。我认为这是如何操作 Pig 脚本的好习惯。
    • 其他一些注意事项:1-/home/<username>/.pigbootup 中的共享启动命令将自动执行(不需要RUN)。 2- RUN 将产生额外的副作用,将脚本中的每个命令放入您的 grunt 历史记录中(就像您已单独执行脚本中的命令一样;EXEC 只留下 EXEC 行历史上。)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多