BagOfBagsConcat是必需的UDF吗?还是不好的形式?

时间:2012-06-13 13:07:30

标签: apache-pig

我设法给自己买了一袋袋子,每个内袋包含相同形式的元组:{({(cow,30),(monkey,20)}),({}),({(duck,3)})}

所以我创建了一个名为BagOfBagsConcat的UDF,它希望将这个确切的情况作为一个参数:一个包含同质包并返回作为输出的包: {(cow,30),(monkey,20),(duck,3)}

我环顾四周,在datafu中只发现了BagConcat。这是否表明这个功能并不是必需的,而且一袋袋子只是一个大自然的怪物,我必须重新审视我的猪脚本?

谢谢,如果我需要指定创建它的pig脚本以便更清楚,请告诉我。

2 个答案:

答案 0 :(得分:1)

这并不罕见。我们也遇到过这种情况,因此我们为下一版本的DataFu添加了BagUnion。正如你所描述的那样,它就像BagConcat,除了它在一袋袋子而不是一袋袋子上运作。

答案 1 :(得分:0)

糟糕。有时左连接比cogroup更好。这创造了一袋袋子:

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;

现在它是一个普通的元组包(虽然它们中的一些由于左连接而具有空值,但是更容易处理)。