如何在pig中查询与最小值/最大值相关的数据

ou6hu8tu  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(301)

我在寻找每天最冷的时刻。我的数据如下:

(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)

我的problem:i also 需要最低温度出现的时间。我怎样才能同时得到时间呢?

vmpqdwk3

vmpqdwk31#

是的,你在正确的轨道上。修改你的组语句以按天和小时分组。最后在你的组上使用展平将键解耦。

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

0s0u357o2#

如果我对你的问题理解正确,按 (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); 
};

像以前一样按天分组,然后按温度排序同一天内的所有小时,只选择最上面的记录。请注意,如果两个或两个以上的小时之间有联系,则只会选择其中一个小时。

相关问题