0

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

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

我环顾四周,发现datafu中只有BagConcat。这是否表明这个功能真的没有必要,一袋袋子只是大自然的怪胎,我必须重新审查我的猪脚本?

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

4

2 回答 2

1

这并不少见。我们也遇到了这个问题,所以我们在 DataFu 中为下一个版本添加了BagUnion。正如您所描述的,它就像 BagConcat 一样,只是它对一袋袋子而不是一袋袋子进行操作。

于 2013-07-19T03:58:16.773 回答
0

哎呀。有时left-join比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;

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

于 2012-06-13T14:00:48.377 回答