Как запросить данные, связанные с минимумом / максимумом в свинье - PullRequest
0 голосов
/ 08 мая 2018

Я ищу самый холодный час для каждого дня. Мои данные выглядят так:

(2015/12/27,12AM,32.0)
(2015/12/27,12PM,34.0)
(2015/12/28,10AM,26.1)
(2015/12/28,10PM,28.0)
(2015/12/28,11AM,27.0)
(2015/12/28,11PM,28.9)
(2015/12/28,12AM,25.0)
(2015/12/28,12PM,26.100000000000005)
(2015/12/29,10AM,22.45)
(2015/12/29,10PM,26.1)
(2015/12/29,11AM,24.1)
(2015/12/29,11PM,25.0)
(2015/12/29,12AM,28.9)

Я группировал каждый день, чтобы найти минимальную температуру с этим кодом:

minTemps = FOREACH gdate2 GENERATE group as day,MIN(removeDash.temp) as minTemp;

, который дает этот вывод:

(2015/12/18,17.1)
(2015/12/19,12.9)
(2015/12/20,23.0)
(2015/12/21,32.0)
(2015/12/22,30.899999999999995)
(2015/12/23,36.05)
(2015/12/24,30.45)
(2015/12/25,26.55)
(2015/12/26,28.899999999999995)
(2015/12/27,26.1)
(2015/12/28,23.55)
(2015/12/29,21.0)

Моя проблема: мне также нужен час, в который произошла минимальная температура. Как я могу получить час?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Если я правильно понимаю ваш вопрос, группировка по (day, hour) не будет работать, потому что она находит самую низкую температуру для каждого часа, а не самый холодный час и температуру для каждого дня.

Вместо этого используйтевложенный foreach:

B = GROUP A BY day;
C = FOREACH B {
    orderd = ORDER A BY temp ASC;
    limitd = LIMIT orderd 1;
    GENERATE FLATTEN(limitd) AS (day, hour, temp); 
};

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

0 голосов
/ 08 мая 2018

Да, вы на правильном пути. Модифицируйте свой групповой оператор для группировки по дням и часам. Наконец, используйте FLATTEN в вашей группе, чтобы отделить ключи.

gdate2 = GROUP removeDash by (day,hour);
minTemps = FOREACH gdate2 GENERATE FLATTEN(group) as (day,hour),MIN(removeDash.temp) as minTemp;
...