Pig バージョン 0.10.0 以降を使用している場合は、ソースのタグ付けとMultiStorageの組み合わせを利用して、ファイルを追跡できます。
たとえばpigin
、次のようなファイルとコンテンツを含む入力ディレクトリがあるとします。
pigin
|-test1 => "hello"
|-test2 => "world"
|-test3 => "Apache"
|-test4 => "Hadoop"
|-test5 => "Pig"
次のスクリプトは、各スクリプトを読み取り、各ファイルの内容を別のディレクトリに書き込みます。
%declare inputPath 'pigin'
%declare outputPath 'pigout'
-- Define MultiStorage to write output to different directories based on the
-- first element in the tuple
define MultiStorage org.apache.pig.piggybank.storage.MultiStorage('$outputPath','0');
-- Load the input files, prepending each tuple with the file name
A = load '$inputPath' using PigStorage(',', '-tagsource');
-- Write output to different directories
store A into '$outputPath' using MultiStorage();
上記のスクリプトは、次のような出力ディレクトリ ツリーを作成します。
pigout
|-test1
| `-test1-0 => "test1 hello"
|-test2
| `-test2-0 => "test2 world"
|-test3
| `-test3-0 => "test3 Apache"
|-test4
| `-test4-0 => "test4 Hadoop"
|-test5
| `-test5-0 => "test5 Pig"
ファイル名の-0
末尾の は、出力を生成したレデューサーに対応します。レデューサーが複数ある場合は、ディレクトリごとに複数のファイルが表示されることがあります。