Piglatin limit и flatten дают неправильные результаты

B = GROUP A BY state;
C = FOREACH B {                          
   DA = ORDER A BY population DESC;                
   DB = LIMIT DA 5;                         
   GENERATE FLATTEN(group), FLATTEN(DB.name), FLATTEN(DB.population);
}

Проблема в том, что я получаю название города 5 раз вместо 1. Я получаю что-то вроде:

(ALASKA,M,27257)
(ALASKA,M,23696)
(ALASKA,M,19949)
(ALASKA,M,19926)
(ALASKA,M,19833)
(ALASKA,H,27257)
(ALASKA,H,23696)
(ALASKA,H,19949)
(ALASKA,H,19926)
(ALASKA,H,19833)

И вывод, который мне нужен:

(ALASKA,M,27257)
(ALASKA,H,23696)

person user1855165    schedule 03.12.2012    source источник
comment
Не могли бы вы предоставить ввод для вывода, который вам нужен?   -  person Lorand Bendig    schedule 04.12.2012
comment
@LorandBendig ввод - 2 таблицы штатов и городов   -  person user1855165    schedule 04.12.2012


Ответы (1)


2 сглаживания: FLATTEN(DB.name), FLATTEN(DB.population); вызвать декартово произведение между 2 мешками, заменить его одним

B = GROUP A BY state;
C = FOREACH B {                          
   DA = ORDER A BY population DESC;                
   DB = LIMIT DA 5;                         
   GENERATE FLATTEN(group), FLATTEN(DB.(name, population));
}

Или, поскольку сумки, созданные GROUP BY, содержат все исходные кортежи со всеми столбцами, вы можете сделать это:

B = GROUP A BY state;
C = FOREACH B {                          
   DA = ORDER A BY population DESC;                
   DB = LIMIT DA 5;                         
   GENERATE FLATTEN(DB);
}
person alexeipab    schedule 04.12.2012