Hadoop Pig UDF调用问题



下面的代码工作得很好,但是当我已经有两个现有的包(有它们的别名,假设S1和S2代表两个集的两个现有包)时,想知道如何调用UDF setDifference来生成集的差异吗?我认为如果我手动构造一个额外的包,使用我已经存在的输入包(S1和S2),它会增加额外的开销吗?

register datafu-1.2.0.jar;
define setDifference datafu.pig.sets.SetDifference();
-- ({(3),(4),(1),(2),(7),(5),(6)} t {(1),(3),(5),(12)})
A = load 'input.txt' AS (B1:bag{T:tuple(val:int)},B2:bag{T:tuple(val:int)});
F1 = foreach A generate B1;
F2 = foreach A generate B2;
differenced = FOREACH A {
  -- input bags must be sorted
  sorted_b1 = ORDER B1 by val;
  sorted_b2 = ORDER B2 by val;
  GENERATE setDifference(sorted_b1,sorted_b2);
}
-- produces: ({(2),(4),(6),(7)})
DUMP differenced;
更新:

问题是,假设我已经有两个包,如何调用UDF setDifference来获得设置差异?我是否需要再做一个超级包来装这两个单独的包?谢谢。

提前感谢,林

我不认为UDF调用有任何开销问题。

Ref: http://datafu.incubator.apache.org/docs/datafu/guide/set-operations.html,我们有一个使用SetDifference方法的例子。

根据API (http://datafu.incubator.apache.org/docs/datafu/1.2.0/datafu/pig/sets/SetDifference.html) SetDifference方法将bags作为输入并发出它们之间的差异。

注意:请注意,输入包必须排序。

在共享的示例代码片段中,我不认为需要下面的代码片段

F1 = foreach A generate B1;
F2 = foreach A generate B2;

最新更新