PIG中整套记录的最大值/最小值
问题描述:
我有一组记录,我从一个文件中加载,我需要做的第一件事是获取列的最大值和最小值。 在SQL我会这样子查询做到这一点:PIG中整套记录的最大值/最小值
select c.state, c.population,
(select max(c.population) from state_info c) as max_pop,
(select min(c.population) from state_info c) as min_pop
from state_info c
我认为必须有一个简单的方法来做到这一点猪很好,但我无法找到它。它有一个最大和最小的功能,但是当我试着做以下没有工作:
records=LOAD '/Users/Winter/School/st_incm.txt' AS (state:chararray, population:int);
with_max = FOREACH records GENERATE state, population, MAX(population);
这没有奏效。我有更好的运气为每行添加一个具有相同值的额外列,然后将它们分组到这一列。然后获得新组的最大值。这似乎是一种让我想要得到的令人费解的方式,所以我想我会问有没有人知道更简单的方法。
在此先感谢您的帮助。
答
正如您所说,您需要将所有数据组合在一起,但如果您使用GROUP ALL,则不需要额外的列。
猪
records = LOAD 'states.txt' AS (state:chararray, population:int);
records_group = GROUP records ALL;
with_max = FOREACH records_group
GENERATE
FLATTEN(records.(state, population)), MAX(records.population);
输入
CA 10
VA 5
WI 2
输出
(CA,10,10)
(VA,5,10)
(WI,2,10)
谢谢 - 我知道必须有一个简单的方法来做到这一点。 – Winter 2011-03-10 23:56:22