私は Piglatin の初心者です。次のようなデータ ファイルがあります (メッセージ、電子メール、usersession、spamType)。
簡単にするために、スパム/非スパムのみを使用しました - このフィールドの値は、通常、約 100 の異なるバリアントです。
message1 user1@email 12345 spam
message2 user1@email 12345 spam
message3 user1@email 12345 not-spam
message10 user2@email 90879 not-spam
message11 user2@email 90879 not-spam
あるユーザーからのメッセージのいずれかがスパムとしてマークされている場合に必要なのは、すべてのメッセージを削除/フィルター処理することです..したがって、上記の出力は次のようになります
message10 user2@email 90879 not-spam
message11 user2@email 90879 not-spam
他の 3 つのメッセージは削除されます - これらは同じユーザー/セッションからのものであるためです。
グループ化とネストを使用して上記の問題を解決しようとしています。
DATA = LOAD './spamdata' using PigStorage() as (message:chararray, mailid:chararray, session:long, spamType:chararray);
GDATA = GROUP DATA BY (mailid,session);
GDATAは次のようになります
GDATA: {group: (message: chararray,session: long),DATA: {(message: chararray,mailid: chararray,session: long,spamType: chararray)}}
必要なのは、バッグ内の要素に「スパムではない」タイプの要素がないこのグループから要素をダンプすることだけです