豚のLOADステートメントへの入力値を動的に計算する方法はありますか? 概念的には、次のようなことをしたいと考えています。
%declare MYINPUT com.foo.myMethod('2013-04-15');
raw = LOAD '$MYINPUT' ...
myMethod() は、日付を入力として受け取り、ディレクトリの (カンマ区切りの) リストを文字列として返す UDF です。その文字列は、LOAD ステートメントへの入力として与えられます。
ありがとう。
豚のLOADステートメントへの入力値を動的に計算する方法はありますか? 概念的には、次のようなことをしたいと考えています。
%declare MYINPUT com.foo.myMethod('2013-04-15');
raw = LOAD '$MYINPUT' ...
myMethod() は、日付を入力として受け取り、ディレクトリの (カンマ区切りの) リストを文字列として返す UDF です。その文字列は、LOAD ステートメントへの入力として与えられます。
ありがとう。
同様の問題があり、 pre-processor の代わりに Java LoadFunc 実装を選択しました。カスタム LoadFunc を使用するということは、アナリストが在庫の pig 実行可能ファイルを使用してスクリプトを引き続き実行でき、別の依存関係を必要としないことを意味します。
myMethod() が UDF である必要があるようには思えません。このディレクトリのリストを map reduce で計算する必要がないと仮定すると、最初に関数を実行して文字列を取得し、次にそれを pig に渡すプロパティにすることができます。ドライバーが Java であった場合のサンプルを以下に示します。
String myInput = myMethod("2013-04-15");
PigServer pig = new PigServer(ExecType.MAPREDUCE);
Map<String,String> myProperties = new HashMap<String,String>();
myProperties.put("myInput",myInput);
pig.registerScript("myScriptLocation.pig");
そして、スクリプトは次のように始まります
raw = LOAD '$myInput' USING...
これは、myInput 文字列が PigStorage が読み取れるグロブ形式であるか、コンマ区切りの文字列を処理できる別の LoadFunc があることを前提としています。