GROUP by и SUM с MAX () - PullRequest
       40

GROUP by и SUM с MAX ()

0 голосов
/ 08 апреля 2019

У меня есть набор данных с колонками Год, Страна, Пол и население.Мне нужно выяснить самую густонаселенную страну по последнему году

a = group data by Country;
b = foreach a generate flatten(group), MAX(data.Year);
# Until here I am able to get the country and latest year 
# SUM on data.Population is giving errors

Мне нужно получить результат в следующем порядке Страна, год и население (только этого года)

1 Ответ

0 голосов
/ 08 апреля 2019

Как только вы получите максимальный год для каждой страны, объедините этот набор данных с первым соотношением нагрузки, а затем сгруппируйте по стране и году, чтобы получить сумму населения.

Предполагается, что вы загрузили данные в отношение, называемое данными. Соедините данные с b по стране и году.

data = load 'data_file' using PigStorage(',') as (country:chararray,year:int,population:int);
a = group data by country;
b = foreach a generate flatten(group) as country, MAX(data.Year) as year;
c = join data by (country,year), b BY (country,year);
c1 = foreach c generate data.country as country,data.year as year,data.population as population;
d = group c1 by c1.country,c1.year;
e = foreach d generate FLATTEN(group) as country,year,SUM(d.population);
dump e; 
...