hadoop pig udf调用问题

1yjd4xko  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(315)

下面的代码工作得很好,但是当我已经有两个现有的包(使用它们的别名,假设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来获取set difference?我需要建立另一个超级袋,其中包含两个单独的袋子?谢谢。
提前谢谢你,林

uubf1zoe

uubf1zoe1#

我没有发现udf调用有任何开销问题。
裁判: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方法将行李作为输入并发出它们之间的差异。
n、 b.注意输入的行李必须分类。
在共享的示例代码段中,我认为不需要下面的代码段

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

相关问题