You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pig中查询极值关联数据:获取每日最低温时段

获取每日最低气温对应的时段(Pig Latin实现)

看起来你已经在尝试用Pig Latin按日期分组计算最低温了,但目前的代码只能拿到温度值,没法关联对应的时段对吧?别担心,我来帮你完善这个逻辑!

先整理下你的原始气温数据

你提供的原始数据如下(已格式化):

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

问题分析

你当前的FOREACH gdate2 GENERATE group as day,MIN(rem...)只能提取到每日最低温度值,但没办法同时拿到对应的时段。要解决这个问题,我们需要在分组后对每组内的数据按温度排序,然后取出温度最低的那条完整记录。

完整的Pig Latin解决方案

-- 1. 加载原始数据并清洗(处理括号和分割字段)
raw_data = LOAD 'your_data_file_path' USING PigStorage(',') AS (col1:chararray, col2:chararray, col3:chararray);

-- 清洗数据,去掉括号并提取有效字段
clean_data = FOREACH raw_data GENERATE
    -- 提取日期:去掉开头的(
    REGEX_EXTRACT(col1, '^\\((.*)', 1) AS day:chararray,
    -- 提取时段:直接取col2的值
    col2 AS time_slot:chararray,
    -- 提取温度:去掉结尾的)
    REGEX_EXTRACT(col3, '(.*)\\)$', 1) AS temperature:double;

-- 2. 按日期分组
gdate2 = GROUP clean_data BY day;

-- 3. 分组内排序并获取最低温记录
min_temp_details = FOREACH gdate2 {
    -- 对组内数据按温度升序排序(温度最小的排最前面)
    sorted_records = ORDER clean_data BY temperature ASC;
    -- 取排序后的第一条记录,就是当日最低温的完整数据
    lowest_temp_record = LIMIT sorted_records 1;
    -- 生成最终结果:日期、最低温时段、最低温度
    GENERATE
        group AS day,
        FLATTEN(lowest_temp_record.time_slot) AS lowest_temp_time,
        FLATTEN(lowest_temp_record.temperature) AS lowest_temperature;
}

-- 4. 查看结果
DUMP min_temp_details;

预期输出结果

运行上述代码后,你会得到如下结果:

(2015/12/27,12AM,32.0)
(2015/12/28,12AM,25.0)
(2015/12/29,10AM,22.45)

关键说明

  • 为什么不用MIN()直接关联?因为Pig的MIN()聚合函数只能返回单一的最小值,无法关联到对应的其他字段(比如时段)。
  • 通过ORDER + LIMIT的方式,我们可以拿到组内温度最低的完整记录,从而同时获取时段和温度值。

内容的提问来源于stack exchange,提问作者zac s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:03:55