2

アカウントのさまざまなデータを計算し、各データを別のファイルに保存するプロジェクトがあります (各計算には別のスクリプトがあります)。次に、アカウントのすべてのデータを組み合わせた最終ファイルを作成する必要があります。これを行う 1 つの方法は、各出力を別のディレクトリに保存し、最終的なスクリプトで各ディレクトリにスキーマをロードし、アカウントで結合 (または共同グループ化) して出力することです。ここでの問題は、ロードするディレクトリを pig に指示する必要があることです。計算を簡単に追加できるように、より一般的なスクリプトを作成したかったので、親ディレクトリを作成し、その下 (サブディレクトリ) にすべての出力を保存しました。それから私はこのスクリプトを書きました

attributes_data=        load '$attributes_data' using CSVLoader;
union_data=         group attributes_data by TRIM ($0);
final_output=       foreach union_data generate
            FLATTEN(Merge_Bags(attributes_data));
store order_data into '$final_attr' using AttributesStorer;

この方法では、pig にどのファイルをロードする必要があるかを伝える必要はありません。出力ディレクトリの下にあるすべてのサブディレクトリをロードするだけです。ここでの問題は、グループ化後のバッグ内のタプルの順序が一貫していないため、最終結果に一貫した順序がないことです。これが問題です。

最終結果でデータの順序を節約しながら、スクリプトを可能な限り汎用的にするというあなたのアイデアに本当に感謝します。

4

1 に答える 1

0

グループ化する前に、それが目的にかなう場合は、ORDER BY 句を使用してみてください。

于 2013-04-04T06:10:52.730 に答える