2

ファイルから入力を読み取り、カスタム UDF に送信する豚のスクリプトがあります。カスタム UDF は、2 つのキーと値のペアを含むマップを返します。その後、各キーと値のペアを 2 つの異なる場所に保存する必要があります。ストアを使用して実行しています。私たちが直面している問題は、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';

複数のSTOREがある場合でも、UDFが1回だけ呼び出される豚のスクリプトに方法はありますか....

4

1 に答える 1

0

裏で起こっていることは、MAPREC が代入文によって取り込まれていないことだと思います。Pig は、MAPREC が使用される (2 回) まで待って、その内容を把握します。FOREACH を使用して MAPREC を反復処理することにより、中間構造を作成することをお勧めします。これにより、MyUDF の呼び出しが 1 回強制され、次の FOREACH ステートメントで MAPREC の代わりにその中間結果が 2 回使用されます。それが理にかなっていることを願っています。

于 2012-09-02T14:25:11.990 に答える