包是一个必要的自定义项?还是形式不好?

rwqw0loc  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(257)

我给自己弄了一袋袋子,里面的每个袋子都有相同的元组: {({(cow,30),(monkey,20)}),({}),({(duck,3)})} 因此,我创建了一个名为bagofbagsconcat的自定义项,它期望将这种情况作为一个参数:一个包含同质包并作为其输出返回的单个包: {(cow,30),(monkey,20),(duck,3)} 我四处找了找,在达塔夫只找到了白砂糖。这是不是意味着这个功能不是真的必要,一袋袋袋袋袋只是一个自然的怪物,我必须重新审查我的Pig脚本?
谢谢,如果我需要指定创建这个的pig脚本,请告诉我,以便更清楚。

vxf3dgd4

vxf3dgd41#

哎呀。有时左连接比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;

现在它是一个普通的元组包(尽管由于左连接,其中一些元组有空值,但这更容易处理)。

wqnecbli

wqnecbli2#

这并不少见。我们也遇到了这个问题,所以我们为下一个版本的datafu添加了一个bagunion。正如您所描述的,它与bagconcat类似,只是它操作的是一袋袋而不是一组袋。

相关问题