【发布时间】:2013-03-27 14:07:13
【问题描述】:
我正在使用Pig 10.0。我想在 foreach 中合并包。假设我有以下visitors 别名:
(a, b, {1, 2, 3, 4}),
(a, d, {1, 3, 6}),
(a, e, {7}),
(z, b, {1, 2, 3})
我想对第一个字段上的元组进行分组,并将包与一组语义合并以获得以下元组:
({1, 2, 3, 4, 6, 7}, a, 6)
({1, 2, 3}, z, 3)
第一个字段是具有集合语义的包的并集。元组的第二个字段是组字段。第三个字段是袋子里的物品数量。
我围绕以下代码尝试了几种变体(将 SetUnion 替换为 Group/Distinct 等),但始终未能实现所需的行为:
DEFINE SetUnion datafu.pig.bags.sets.SetUnion();
grouped = GROUP visitors by (FirstField);
merged = FOREACH grouped {
VU = SetUnion(visitors.ThirdField);
GENERATE
VU as Vu,
group as FirstField,
COUNT(VU) as Cnt;
}
dump merged;
您能解释一下我错在哪里以及如何实现所需的行为吗?
【问题讨论】:
标签: hadoop apache-pig