0

私は自分でバッグのバッグを手に入れることができました。各内側のバッグには同じ形式のタプルが含まれています。{({(cow,30),(monkey,20)}),({}),({(duck,3)})}

そのため、BagOfBagsConcat という名前の UDF を作成しました。この UDF は、この正確な状況をパラメーターとして期待します。つまり、同種のバッグを含み、その出力として返される単一のバッグです。 {(cow,30),(monkey,20),(duck,3)}

私は周りを見回しましたが、datafuにはBagConcatしか見つかりませんでした。これは、この関数が実際には必要ないという兆候であり、袋の袋は自然の異常であり、豚のスクリプトを再検討する必要があるという兆候ですか?

ありがとうございます。明確にするために、これを作成した豚のスクリプトを指定する必要がある場合はお知らせください。

4

2 に答える 2

1

それほど珍しいことではありません。私たちもこれに遭遇したので、次のバージョンのDataFuに BagUnion を追加しました。あなたが説明するように、バッグのタプルではなくバッグのバッグで動作することを除いて、BagConcatに似ています。

于 2013-07-19T03:58:16.773 に答える
0

おっとっと。場合によっては、cogroup よりも left-join の方が優れています。これにより、バッグのバッグが作成されました。

final_output = cogroup final_output by nodeid, new_edges by nodeid1;
final_output = foreach final_output generate flatten($1.hash_id) as hash_id, new_edges;
final_output = cogroup nodes_per_entity by hash_id, final_output by hash_id;

だから私はそれを次のように変更しました:

final_output = join final_output by nodeid left, new_edges by nodeid1;
final_output = group final_output by hash_id;
final_output = foreach final_output generate group as hash_id, 
    final_output.(nodeid1, nodeid2, edge_pit, asset_id1, asset_id2) as new_edges;

そして今、それはタプルの通常のバッグです(ただし、左結合のために空の値を持つものもありますが、そのほうが扱いやすいです)。

于 2012-06-13T14:00:48.377 に答える