Apache pig 将袋子中两个元组中的两个数字分开
对不起,标题太难看了。我在这里试图做的是为了一个关系,比如:Apache pig 将袋子中两个元组中的两个数字分开,apache-pig,Apache Pig,对不起,标题太难看了。我在这里试图做的是为了一个关系,比如: {group: chararray,G: {(query: chararray,type: chararray,count: long)}} 这是“分组依据”的结果,每个键最多有2个元组,按“类型”区分。例如,一个示例可能如下所示: {group:'abc', G:{('abc', 'A', 10), ('abc', 'B', 20)} 现在,我想对每组进行(A中计数)/(B中计数)的数学运算。我对猪很陌生,尝试过不同的方法,但都
{group: chararray,G: {(query: chararray,type: chararray,count: long)}}
这是“分组依据”的结果,每个键最多有2个元组,按“类型”区分。例如,一个示例可能如下所示:
{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;
}
没有一个有效。如果您对数据有先决条件,比如“每个键最多有2个元组”,那么我建议不要使用
组,因为它不是为处理您所想的内容而设计的。相反,您可以将数据集拆分为两部分,然后将这些部分重新连接在一起。这样可以保持每个键的元组笔直。例如:
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;