私の入力データは以下の形式になります。Pigはキー変更列を生成します - 前のレコードと現在のレコードが異なる列を比較します
col1 col2 col3 effective date expiry date
1 Q1 A1 Value1 01/01 01/02
2 Q1 A1 Value1 01/02 01/03
3 Q1 A1 Value1 01/03 01/05
4 Q1 A1 Value2 01/05 01/06
5 Q1 A1 Value2 01/06 01/07
6 Q1 A1 Value2 01/07 01/08
7 Q1 A1 Value1 01/08 01/11
8 Q1 A1 Value1 01/11 12/31
私はCOL1、COL2、COL3ではなく、すべての重複の値に基づいて重複を削除する必要があります。 col3の値が異なる値に変わるまで、レコード は重複しているとみなされます。たとえば。上記のデータでは、値1は4番目のレコードで値2に変わります。そのため、レコード1,2と3のうち最初のレコードのみを保持する必要があります。 そして、レコード4,5,6のうち、4番目のものだけが保持されるべきです。レコード7と8の間には7つしか保持されません。最後の2列は、実際には日付列(有効な と有効期限)です。 1,2,3のような複製は、1,2,3,4,5が同じ値を持つことができるなど、何度も出現する可能性があります。重複がない場合もあります。
私は2つのアプローチを念頭に置いていましたが、それらのコードをどのようにコードするかはわかりませんでした。
だから、全てdupes 1から0までの値を変更し、キー(COL1の組み合わせ、COL2、COL3) 変更てkeyChangeカラム(1または0)を生成することを考えましたこのkeychangeカラムの値は1に設定する必要があります。次に、このカラムをフィルタリングできます。 しかし、udfに渡すときに入力をソート順にする必要があるので、UDFを書く必要があります(似たような機能を持つUDFはありますか?)。 udfにソートされたデータを渡すことは可能ですか?もしそうなら、どうですか?これはどんな種類のUDFですか? でもmapreduceコードを書いても、マッパーでレコードを出力して、すべてのソートを で行い、減速機で列を生成すると、どうすればいいですか?あなたの意見を教えてください。(地図作成プログラミングには新しいので、あなたのアイデアは学習に多くの助けになります。ありがとう!)
"over"関数のドキュメントを調べると、以前のレコードと現在のレコードの同じ列だけが比較されます。もし何か私がのcol5(有効期限) col4(有効日)を昇順にソートした後、Col1、col2、Col3 でグループを作成し、有効日が以前のレコードの有効期限と同じであったレコードを削除することができます。しかし、オーバーファンクションを使用して2つの異なる列を比較する方法がわかりません。 私もこの1つについてあなたの考えを知らせてください。
これを解決する別の方法があるかどうか教えてください。あなたの時間をありがとう!
できることは、col1、col2、col3を使用して行をグループ化し、グループの各行をudfに渡すことです。 udfでは、日付が連続しているかどうかをチェックしてから決定します。 –
こんにちはVikas、入力いただきありがとうございます。私も同じアプローチを考えていました。私は今、そのUDFを書いています。私は1つの質問がある。出力袋に複数のタプルを書く必要があります。 C1、Q1、およびValue1の場合は1と7です。出力スキーマの記述方法についてはわかりません。 現在、私は を使用しています。スキーマbagSchema =新しいスキーマ(新しいSchema.FieldSchema( "filtered"、intuple、DataType.TUPLE)); – Aandal
しかし、私はどのように複数のタプルを追加するか分からない。あなたはお勧めできますか?私は下のリンクを参照しています。 [link] http://www.spryinc。com/blog/guide-user-defined-functions-apache-pig [link]また、これらの2行が何であるか教えてください。 スキーマbagSchema =新しいスキーマ(新しいSchema.FieldSchema( "pair"、tupleSchema、DataType.TUPLE)); bagSchema.setTwoLevelAccessRequired(true); Schema.FieldSchema bagFs = new Schema.FieldSchema( "pairs"、bagSchema、DataType.BAG); なぜ最後の行に別のバッグを定義する必要がありますか? – Aandal