对于尴尬的标题感到抱歉。我在这里要做的是关系,例如:
{group: chararray,G: {(query: chararray,type: chararray,count: long)}}
这是'group by'的结果,每个键最多有2个元组,由'type'区分。例如。一个例子可能看起来像:
{group:'abc', G:{('abc', 'A', 10), ('abc', 'B', 20)}
现在我想为每个小组做数学计算(计入'A')/(计入'B')。我对猪很新,尝试了不同的方法,但无法做到正确。有什么建议吗?我试过的一些事情:
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;
}
没有工作。
答案 0 :(得分: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;