Pig で比較したい 2 つのデータ セットがあります。どちらも同じ一意の ID を持ち、2 番目のデータ セットの名前がランダムに変更されています。ロジックは次のとおりです。
- empl1 の生データを読み込む
- empl2 の生データを読み込む
- 「names are not same」と「emplno is equal」の行を選択
私はやった:
A1= LOAD 'cassandra://employees_pig1/employees_cf' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});
B1= LOAD 'cassandra://employees_pig2/employees_cf' USING CassandraStorage() AS (key, columns: bag {T: tuple(name, value)});
A2 = FOREACH A1 GENERATE key, FLATTEN(columns);
B2 = FOREACH B1 GENERATE key as key2, FLATTEN(columns);
へー、フォーラムに画像を投稿できません。イラストA2、B2のリンクはこちら https://picasaweb.google.com/lh/photo/SU3QgKsbA4nmq83cdnhiVdMTjNZETYmyPJy0liipFm0?feat=directlink
今すぐ助けが必要です。私はこれに正しく取り組んでいますか?
C1 = join A2 by key, B2 by key2;
D1= filter C1 by A2.key==B2.key2 -- cannot do a A2.first_name!=B2.first_name;
「names are not the same」と「emplno is equal」の選択行を実行したいのですが、その 方法が完全にはわかりません。アドバイスお願いします。
ありがとう
更新: - 結合の代わりに、cogroup C3= COGROUP A2 by key, B2 by key2; を実行しました。
https://picasaweb.google.com/lh/photo/_lkEqW4BvIgbnZSHKDCJGNMTjNZETYmyPJy0liipFm0?feat=directlink
次は、しようと思っています
D1= FOREACH C3 GENERATE group, A2.first_name as fn1, B2.first_name as fn2
グループは目的の結果 (つまり empno) を返しますが、'A2.first_name, B2.first_name' は正しくありません。A2 および B2 バッグ/タプル内のデータにアクセスする方法を知る必要があります。
その後、FILTER BY fn1==fn2 を実行できます。