如何在另一个猪脚本中调用猪脚本

Posted

技术标签:

【中文标题】如何在另一个猪脚本中调用猪脚本【英文标题】:how to call a pig script within another pig script 【发布时间】:2011-09-26 15:33:16 【问题描述】:

我在 hdfs 中有一个包含 100 列的文件,我想使用 pig 对其进行处理。我想将此文件加载到一个单独的猪脚本中具有列名的元组中,并从其他猪脚本中重用此脚本。我该怎么做?

假设这个 100 列的 pig 脚本是 - 100col.pig。如何从 anotherone.pig 中调用它?

【问题讨论】:

【参考方案1】:

检查exec 命令(用于批处理)或run 命令(用于交互式脚本)。此外,如果您需要使用(非 grunt)shell 命令,请检查 fs 命令。这是一个很好的参考:

http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html

【讨论】:

运行命令做到了! exec 在我的情况下不起作用,因为我希望 100col.pig 中定义的变量可以从我的第二个脚本中获得。 RUN做到了。谢谢! 正如你所暗示的,RUN 有额外的副作用;另请参阅 this later SO answer,它解释了有关 RUNEXEC 的更多信息。【参考方案2】:

您应该尝试使用 pig 0.9 版中存在的宏。

http://pig.apache.org/docs/r0.9.1/cont.html#macros

【讨论】:

【参考方案3】:

这个答案有点晚了,但我最近正在研究这个要求,发现几乎没有任何帮助,直到我找到这个,希望这会对有需要的人有所帮助:

** 这段摘自 Programming Pig 书。

长期以来,在 Pig Latin 中,整个脚本都需要放在一个文件中。这产生了 一些相当不愉快的数千行猪拉丁文脚本。从 0.9 开始,预处理器 可用于在另一个中包含一个 Pig Latin 脚本。与 宏,现在可以编写 更易于调试和重用的模块化 Pig Latin: import 用于在另一个中包含一个 Pig Latin 脚本:

--main.pig

import '../examples/ch6/dividend_analysis.pig';
daily = load 'NYSE_daily' as (exchange:chararray, symbol:chararray,
date:chararray, open:float, high:float, low:float, close:float,
volume:int, adj_close:float);
results = dividend_analysis(daily, '2009', 'symbol', 'open', 'close');

import 将导入的文件直接写入您的 Pig Latin 脚本中,而不是 进口声明。在前面的示例中,divide_analysis.pig 的内容将 放置在 load 语句之前。请注意,无法导入文件 两次。如果你想多次使用相同的功能,你应该把它写成 一个宏并使用该宏导入文件。

【讨论】:

【参考方案4】:

这里有上面提到的两个选项。 Pig 提供 run 和 exec 命令来满足您的要求。

exec 命令用于调用独立运行的 pig 脚本。 run 命令用于运行 pigscipt 并保留其变量和别名。

我想您需要查看运行命令才能满足您的要求。 http://pig.apache.org/docs/r0.9.1/cmds.html#run

【讨论】:

以上是关于如何在另一个猪脚本中调用猪脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的猪脚本中设置多行字符串?

如何在猪拉丁语脚本中没有前导零时将值转换为 hhmm 格式

如何编写计算节点度数和计数的猪脚本

如何从 HDFS 运行猪脚本?

一个猪脚本中的两个存储功能

带有 oozie 工作流程的猪