Java ApachePig:包中最常见的值
我的数据如下所示:Java ApachePig:包中最常见的值,java,apache-pig,Java,Apache Pig,我的数据如下所示: SWE "{(Figure Skating),(Tennis),(Tennis)}" GER "{(Figure Skating),(Figure Skating)}" 我想制作这个: SWE Tennis GER "Figure Skating" 关系符号:x 字段1的符号:NOC 第2栏的符号:运动 最明显的想法是生成计数并按最大计数进行过滤,但我甚至不知道如何在fieldsports上迭代。如何在行动中做到
SWE "{(Figure Skating),(Tennis),(Tennis)}"
GER "{(Figure Skating),(Figure Skating)}"
我想制作这个:
SWE Tennis
GER "Figure Skating"
关系符号:x
字段1的符号:
NOC
第2栏的符号:
运动
最明显的想法是生成计数并按最大计数进行过滤,但我甚至不知道如何在field
sports
上迭代。如何在行动中做到这一点?我建议使用DataFu统计包中每项运动的实例。然后,您可以在每个包中找到最高计数。一种方法是按计数订购“运动”包,然后使用
我在展平模式中使用了CountEach,因为这意味着我们不会在结果中“嵌套”运动名称,但如果愿意,您可以在不使用“展平”的情况下定义UDF
DEFINE CountEachFlatten datafu.pig.bags.CountEach('flatten');
DEFINE FirstTupleFromBag datafu.pig.bags.FirstTupleFromBag();
sports_counted = FOREACH x GENERATE
NOC,
CountEachFlatten(sports) AS sports:{(sport_name, sport_count)};
max_sports = FOREACH sports_counted {
ordered_sports = ORDER sports BY sport_count DESC;
GENERATE
NOC,
FirstTupleFromBag(ordered_sports, null);
}
我建议使用DataFu统计包中每项运动的实例。然后,您可以在每个包中找到最高计数。一种方法是按计数订购“运动”包,然后使用 我在展平模式中使用了CountEach,因为这意味着我们不会在结果中“嵌套”运动名称,但如果愿意,您可以在不使用“展平”的情况下定义UDF
DEFINE CountEachFlatten datafu.pig.bags.CountEach('flatten');
DEFINE FirstTupleFromBag datafu.pig.bags.FirstTupleFromBag();
sports_counted = FOREACH x GENERATE
NOC,
CountEachFlatten(sports) AS sports:{(sport_name, sport_count)};
max_sports = FOREACH sports_counted {
ordered_sports = ORDER sports BY sport_count DESC;
GENERATE
NOC,
FirstTupleFromBag(ordered_sports, null);
}