Hadoop Pig UDF 调用问题
Hadoop Pig UDF invocation issue
下面的代码工作得很好,但是当我已经有两个现有的袋子时(用它们的别名,假设 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 调用有任何开销问题。
参考: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;
下面的代码工作得很好,但是当我已经有两个现有的袋子时(用它们的别名,假设 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 调用有任何开销问题。
参考: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;