2011-09-26 93 views
4

我有一个带有100列的hdfs文件,我想用猪进行处理。我想将这个文件加载到一个带有列名的元组中,并在其他猪脚本中重复使用这个脚本。我该怎么做呢?如何在另一个猪脚本中调用猪脚本

说这100列猪脚本是 - 100col.pig。我如何从anotherone.pig调用它?

回答

5

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

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

+0

运行命令做到了! exec在我的情况下不起作用,因为我希望在第二个脚本中可以使用100col.pig中定义的变量。 RUN做到了。谢谢! – hese

+0

当你提示时,'RUN'有额外的副作用;另请参阅[稍后的SO回答](http://stackoverflow.com/a/20636781/3562032),其中解释了有关'RUN'与'EXEC'的更多内容。 –

1

在这里有如前所述2个选项。 Pig提供run和exec命令来解决您的需求。

执行命令用于调用一个独立运行的猪脚本。 运行命令用于运行pigscipt并保存其变量和别名。

我想你需要检查一下运行命令来达到你的要求。 http://pig.apache.org/docs/r0.9.1/cmds.html#run

2

它有点晚了这个答案,但我最近正在研究这一要求,发现几乎没有什么帮助,直到我发现了这一点,希望这将帮助别人需要:

**此摘录取自编程猪书。

很长一段时间猪拉丁语中,整个脚本需要在一个文件中。这产生了 一些相当令人不快的多行千线猪拉丁脚本。从0.9开始,预处理器 可用于在另一个包含一个Pig拉丁脚本。与 宏总之,现在可以写 模块化的Pig Latin是容易调试和重用: 进口用于包括在一个又一个的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拉丁脚本,而不是导入语句 。在前面的示例中,dividend_analysis.pig的内容将为 立即放在装入语句之前。请注意,文件不能导入 两次。如果您希望多次使用相同的功能,您应该将其编写为一个宏,并使用该宏导入该文件。