Pig多个商店命令创建重复的工作

时间:2012-09-02 13:52:58

标签: performance apache-pig

我有一个pig脚本,它从文件读取输入并发送到我们的自定义UDF,后者发回一个带有2个键/值对的Map。之后,我们必须在两个不同的位置保存每个键值对。我们正在使用Store。我们面临的问题是我们在pig脚本中使用的每个STORE命令都在调用我们的自定义UDF。

>REGISTER MyUDF.jar;

>LOADFILE = LOAD '$file' AS record:chararray;
>MAPREC = FOREACH LOADFILE GENERATE MyUDF(record);
>ERRLIST = FOREACH MAPREC {
>GENERATE $0#'errorRecord' AS ErrorRecord;
>};
>ERRLIST = FILTER ERRLIST BY ErrorRecord is not null;

>MLIST = FOREACH MAPREC {
>GENERATE $0#'mInfo' AS MRecord;
>};
>MLIST = FILTER MLIST BY MRecord is not null;

>STORE MLIST INTO 'fileOut';
>STORE ERRLIST INTO 'errorDir';

猪脚本中是否有一种方法只能调用一次UDF,即使我们有多个STORE ....

1 个答案:

答案 0 :(得分:0)

我认为,幕后发生的事情是MAPREC没有被其任务声明填充。 Pig正在等待,直到使用MAPREC(这是两次)来确定它包含的内容。我建议使用FOREACH迭代MAPREC来创建一个中间结构。这将强制调用MyUDF一次,然后在以下FOREACH语句中使用该中间结果两次代替MAPREC。希望有道理。