如何在另一个猪脚本中调用猪脚本
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,它解释了有关 RUN
与 EXEC
的更多信息。【参考方案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
【讨论】:
以上是关于如何在另一个猪脚本中调用猪脚本的主要内容,如果未能解决你的问题,请参考以下文章