我有一组记录,我从一个文件加载,我需要做的第一件事是获取列的最大值和最小值.在SQL中我会用这样的子查询来做到这一点:
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
Run Code Online (Sandbox Code Playgroud)
我认为在PIG中必须有一个简单的方法来做到这一点,但我找不到它.它有MAX和MIN功能但是当我尝试执行以下操作时它不起作用:
records=LOAD '/Users/Winter/School/st_incm.txt' AS (state:chararray, population:int);
with_max = FOREACH records GENERATE state, population, MAX(population);
Run Code Online (Sandbox Code Playgroud)
这没用.我更幸运的是为每一行添加一个具有相同值的额外列,然后将它们分组到该列上.然后获得该新组的最大值.这似乎是一种令人费解的方式来获得我想要的东西所以我想我会问是否有人知道更简单的方法.
在此先感谢您的帮助.
Rom*_*ain 15
正如您所说,您需要将所有数据组合在一起,但如果您使用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);
Run Code Online (Sandbox Code Playgroud)
输入
CA 10
VA 5
WI 2
Run Code Online (Sandbox Code Playgroud)
产量
(CA,10,10)
(VA,5,10)
(WI,2,10)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19961 次 |
| 最近记录: |