PigLatin を使用して一部のレコードをフィルタリングしています。
User1 8 NYC
User1 9 NYC
User1 7 LA
User2 4 NYC
User2 3 DC
スクリプトはユーザーの重複を削除し、これらのレコードの 1 つを保持する必要があります。Linux特有のコマンドのようなもの。
出力は次のようになります。
User1 8 NYC
User2 4 NYC
助言がありますか?
PigLatin を使用して一部のレコードをフィルタリングしています。
User1 8 NYC
User1 9 NYC
User1 7 LA
User2 4 NYC
User2 3 DC
スクリプトはユーザーの重複を削除し、これらのレコードの 1 つを保持する必要があります。Linux特有のコマンドのようなもの。
出力は次のようになります。
User1 8 NYC
User2 4 NYC
助言がありますか?
あなたの特定の例では、出力にすべての入力列が含まれているため、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);
};
このアプローチは、フィールドのサブセットで一意のレコードを取得し、制御可能な各ユーザーごとの出力レコード数を制限するのに役立ちます。
Pig は、一意のデータを選択する DISTINCT コマンドを提供します。フィールドでdistinctを使用したい場合は、foreachのネストされたブロックでDistinctを使用してください。