1

抱歉标题很尴尬。我在这里尝试做的是一个关系,例如:

{group: chararray,G: {(query: chararray,type: chararray,count: long)}}

这是“分组依据”的结果,每个键最多有 2 个元组,由“类型”区分。例如,一个示例可能如下所示:

{group:'abc', G:{('abc', 'A', 10), ('abc', 'B', 20)}

现在我想为每个组计算(计数'A')/(计数'B')。我对 Pig 还很陌生,尝试了不同的方法,但无法做到正确。有什么建议吗?我尝试过的一些事情:

I = group G by query;
J = foreach I {
CC=filter G by type=='A';
VV=filter G by type=='B';
--generate group, (float)(FLATTEN(CC.count))/(float)(FLATTEN(VV.count)) as CTR, CC, VV ;
--or generate group, (float)(FLATTEN(CC.count))/FLATTEN(VV.count), CC.count, VV.count;
--or generate group, CC.count/VV.count, CC.count, VV.count;

}

没有工作。

4

1 回答 1

3

如果您对数据有先决条件,例如“每个键最多有 2 个元组”,那么我建议您不要使用GROUP,它不是为处理您的想法而设计的。相反,您可以SPLIT将数据集一分为二,然后JOIN将它们重新组合在一起。这样,您可以保持每个键的元组笔直。例如:

SPLIT G INTO typeA IF type == 'A', typeB IF type == 'B';
I = JOIN typeA BY query, typeB BY query;
J = FOREACH I GENERATE typeA::query, (float)typeA::count/typeB::count;
于 2013-06-28T15:06:07.473 回答