我有一个列为country(chararray)、population(int)、zone(int)的表。我需要找到一个人口更多的国家,那里的区域等于1。我需要控制台上的国家名称和人口。
我试过这些陈述。
fl = filter st by zone==1;
grp = group fl by zone;
result = foreach grp generate fl.country,MAX(fl.population);
dump result
它给了我所有的名字和人口。我可以尝试“order by”和“limit”,但我只需要使用max函数。
我试图压平运算符,但它要求我尝试显式转换。你能核实一下吗。
这里我包括了样本数据
country,population,zone
india 3000 1
Australia 4000 2
US 5000 1
China 3000 1
Russia 500 1
4条答案
按热度按时间z4iuyo4d1#
数据
脚本
输出
guicsvcw2#
请用简单的步骤解决:
输出:
(5000美元)
46qrfjad3#
同样可以通过以下方式实现:
与max相比,这种方法的主要优点是您可以轻松地调整它以获得“topk”(只需替换limit语句的参数)。另外,我认为它使用更少的map reduce作业-过滤在mapper中完成,其余的都在reducer中完成。在需要两个作业之后使用max+过滤。
jdgnovmf4#
使用内置的top函数获取包的前n个元组