問題
予想されるスキーマには不要なネストされたタプルで構成されるインナー バッグがあります。タプルレイヤーの1つを削除して、シンプルなインナーバッグだけを残したい. Pig 0.14 を使用しています。
例
私の入力データのサンプル。
((1,100,0),(2))
((1,100,1),(3,500,60))
私の望む出力。
(100,{(2),(3,500,60)})
上記の質問を促したいくつかのマイナーな操作 (以下を参照) 後の私の現在の状態。
(100,{((2)),((3,500,60))})
試み
タプル内のアイテムをグループ化しようとしていることが複雑なように感じます。グループ化された要素をタプルに残すように見える単純なグループステートメントを実行しました(私はPigにかなり慣れていません)。
a = LOAD 'data' as (key:tuple(), data:tuple());
b = GROUP a BY key.$1;
c = FOREACH b GENERATE group as vid, b.data as data;
ダンプc
は、上記の望ましくない出力を提供します。マルチパート キーは、取り外され、グループとして使用され、取り外され(a,b,c)
てもされなくてもよいように剥がされる必要があります。a
b
c
FLATTEN
要素のグループ化を解除しようとしています。その後、FLATTEN
もう一度グループ化できますが、これは少しばかげているようです。これよりも良い方法はありますか?
d = FOREACH c GENERATE vid, FLATTEN(data) as data;
e = FOREACH d GENERATE vid, FLATTEN(data);
f = GROUP e BY $0;
キーを保持しているため、これはまだ私が望むものを実際には提供していません:
(100,{(100,2),(100,3,500,60)})
私は何が欠けていますか?