下面的代码工作得很好,但是当我已经有两个现有的袋(与他们的别名,假设S1和S2用于表示两套两个现有的袋),不知道如何调用UDF setDifference产生设置差异?我认为如果我手动构建一个额外的包,使用我现有的输入袋(S1和S2),这将是额外的开销?Hadoop的猪UDF调用的问题,
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得到一套区别在哪里?我是否需要制造另一个包含两个独立包的超级包?谢谢。
在此先感谢, 林
感谢的,你的意思是与F1和F2调用setDifference作为输入参数?谢谢。 –
@ LinMa:在上面的代码片段中,我没有看到别名F1和F2的需要。参考。第一个链接共享我们有一个使用SetDifference方法的例子。 –
对不起,我可能不清楚我的问题。我的意思是如果我已经有两个包,如何调用UDF setDifference?在代码示例中,它似乎假定从具有两个包的文件读取。 –