我正在使用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)
第一个字段是具有集合语义的包的并集。元组的第二个字段是组字段。第三个字段是袋子里的物品数量。
我尝试了以下代码的几种变体(通过 Group/Distinct 等替换 SetUnion),但始终未能实现所需的行为:
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;
你能解释我错在哪里以及如何实现所需的行为吗?