9

PigLatin を使用して一部のレコードをフィルタリングしています。

User1  8 NYC 
User1  9 NYC 
User1  7 LA 
User2  4 NYC
User2  3 DC 

スクリプトはユーザーの重複を削除し、これらのレコードの 1 つを保持する必要があります。Linux特有のコマンドのようなもの。

出力は次のようになります。

User1 8 NYC 
User2 4 NYC

助言がありますか?

4

2 に答える 2

20

あなたの特定の例では、出力にすべての入力列が含まれているため、distinctはうまく機能しませ($0, $1, $2)ん。($0, $2)($0)$1

ユーザー (任意のレコード) ごとに 1 つのレコードを選択するには、GROUP BYと をネストFOREACHした with で使用できますLIMIT。元:

inpt = load '......' ......;
user_grp = GROUP inpt BY $0;
filtered = FOREACH user_grp {
      top_rec = LIMIT inpt 1;
      GENERATE FLATTEN(top_rec);
};

このアプローチは、フィールドのサブセットで一意のレコードを取得し、制御可能な各ユーザーごとの出力レコード数を制限するのに役立ちます。

于 2012-07-19T08:30:47.653 に答える
0

Pig は、一意のデータを選択する DISTINCT コマンドを提供します。フィールドでdistinctを使用したい場合は、foreachのネストされたブロックでDistinctを使用してください。

于 2012-07-19T05:00:16.410 に答える