0

file1 と file2 の 2 つのファイルがあります。

file1 の内容は次のとおりです。 aa bb cc

file2 の内容は次のとおりです。 aab f2 f3 zzx f2 f3 bbc f2 f3

出力が aa aab f2 f3 bb bbc f2 f3 である Pig を使用して、file1 (フィールド 1) と file2 (フィールド 1) を結合したいと思います。

基本的に、一致は aa*、bb*、cc* などのようなものでなければなりません。

それをどうやって進めるかについてのアイデアはありますか?

4

1 に答える 1

2

最も簡単な解決策は、CROSS演算子の後に. を使用することFILTERです。

input1 = LOAD 'file1' AS (f1:chararray, f2, f3);
input2 = LOAD 'file2' AS (f1:chararray, f2, f3);

crossed = CROSS input1, input2;
filtered = FILTER crossed BY INDEXOF(input2::f1, input1::f1) == 0;

INDEXOF最初の文字列内で 2 番目の文字列を検索し、最初に見つかったインデックスを返す組み込み UDF です。見つからない場合は -1 を返します。2 番目の文字列を最初の文字列で開始する必要があるため、0 のインデックスを探しています。

優れた本 Programming Pigの「Advanced Pig Latin」の章の「Cross」セクションを参照してください。CROSS特に、大量のデータの生成に関する警告に注意してください。入力が大きい場合は、あいまい一致を必要としないように、結合キーを作成するアプリケーション固有の方法を定式化することをお勧めします。

于 2013-01-08T17:42:01.113 に答える