基于Apache Pig统计每年气温超80度天数的方法问询
看起来你已经走了大半流程啦,就差提取年份和最后统计这两步,我给你补全整个完整的Pig脚本,顺便解释下关键部分:
完整实现流程
1. 加载数据集
首先把你的每日气温数据加载进来,指定字段类型(日期是字符串,气温是整数):
data = LOAD '/path/to/your/dataset' USING PigStorage(',') AS (date_str:chararray, max_t:int);
2. 提取年份
因为你的日期格式是固定的yyyy-mm-dd,直接用SUBSTRING函数截取前4位就能拿到年份:
with_year = FOREACH data GENERATE SUBSTRING(date_str, 0, 4) AS year:chararray, max_t;
小提示:Pig的
SUBSTRING是左闭右开规则,SUBSTRING(s, 0,4)会取索引0-3的字符,正好是4位年份数字。
3. 筛选高温记录
你提到的SPLIT方法可行,但如果只需要保留气温超80度的数据,用FILTER会更高效(不用拆分出不需要的数据集):
hot_records = FILTER with_year BY max_t > 80;
要是你坚持想用SPLIT,写法是这样的:
SPLIT with_year INTO hot_records IF max_t > 80, cold_records OTHERWISE;
4. 按年份分组统计天数
分组后用COUNT函数统计每组的记录数,也就是对应年份的高温天数:
grouped_by_year = GROUP hot_records BY year; yearly_hot_days = FOREACH grouped_by_year GENERATE group AS year, COUNT(hot_records) AS days;
5. 查看或保存结果
用DUMP直接在控制台输出结果(就是你要的(1993, 21)这种元组格式),或者用STORE保存到文件:
DUMP yearly_hot_days; -- 或者保存到指定路径 STORE yearly_hot_days INTO '/path/to/output' USING PigStorage(',');
把这些步骤按顺序运行,就能得到各年份对应高温天数的结果啦~
内容的提问来源于stack exchange,提问作者Zrpizzaguy
相关产品推荐
相关产品推荐

