2
我有一个猪脚本从文件中读取输入并发送到我们的自定义UDF,它发回带有2个键/值对的映射。之后,我们必须将每个关键值对保存在2个不同的位置。我们正在使用Store进行此操作。我们面临的问题是我们在猪脚本中使用的每个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将只被调用一次,即使我们有多个商店....
谢谢克里斯的输入。我们会尝试。但是,当我们使用Pig'Explain'时,它显示了两个Map Reduce计划,每个计划用于2个STORE命令,就像猪脚本一样....这使我认为我们如何提取/使用猪关系可能是错误的......任何输入在这 – Sarath
没错。我期望看到两个商店的mapreduce步骤,因为STORE UDF与OutputFormat类进行交互,每个Reducer通常有一个OutputFormat。 –
Pig不会逐行执行逐行执行的脚本。相反,它会逐步为赋值语句中的每个“变量”建立公式(缺少更好的单词)。我不知道Pig如何决定何时开始mapreduce步骤,但在你的情况下,它等待太久。我提出的建议有望在处理的早期触发另一个mapreduce步骤。 –