何かが足りないようです。データのレデューサーの数によって HDFS にその数のファイルが作成されますが、データは複数のファイルに分割されません。私が気付いたのは、group by
次のデータがキーに基づいて2つのファイルにうまく分割されているように、連続した順序でキーを実行すると正常に機能することです。
1 hello
2 bla
1 hi
2 works
2 end
しかし、このデータは分割されません:
1 hello
3 bla
1 hi
3 works
3 end
私が使用したコードは、一方では正常に機能し、他方では正常に機能しません
InputData = LOAD 'above_data.txt';
GroupReq = GROUP InputData BY $0 PARALLEL 2;
FinalOutput = FOREACH GroupReq GENERATE flatten(InputData);
STORE FinalOutput INTO 'output/GroupReq' USING PigStorage ();
上記のコードは 2 つの出力パーツ ファイルを作成しますが、最初の入力ではデータを適切に分割し、 key 1
inpart-r-00000
と key 2
inを配置しpart-r-00001
ます。しかし、2 番目の入力では 2 つの部分ファイルが作成されますが、すべてのデータは最終的にpart-r-00000
. 何が足りないのですか? 一意のキーに基づいてデータを強制的に複数の出力ファイルに分割するにはどうすればよいですか?
注: 2 番目の入力PARALLEL 3
(3 つのレデューサー) を使用する場合、3 つの部分ファイルが作成され、キー入力のすべてのデータとキー入力ファイルのすべてのデータが追加1
さpart-0
れ3
ますpart-3
。この振る舞いは奇妙だと思いました。ところで、Cloudera CDH3B4 を使用しています。