我设法给自己买了一袋袋子,每个内袋包含相同形式的元组:{({(cow,30),(monkey,20)}),({}),({(duck,3)})}
所以我创建了一个名为BagOfBagsConcat的UDF,它希望将这个确切的情况作为一个参数:一个包含同质包并返回作为输出的包:
{(cow,30),(monkey,20),(duck,3)}
我环顾四周,在datafu中只发现了BagConcat。这是否表明这个功能并不是必需的,而且一袋袋子只是一个大自然的怪物,我必须重新审视我的猪脚本?
谢谢,如果我需要指定创建它的pig脚本以便更清楚,请告诉我。
答案 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;
现在它是一个普通的元组包(虽然它们中的一些由于左连接而具有空值,但是更容易处理)。