用mapreduce 处理气象数据集
编写程序求每日最高最低气温,区间最高最低气温

气象数据集下载地址为:ftp://ftp.ncdc.noaa.gov/pub/data/noaa

  • 按学号后三位下载不同年份月份的数据(例如201506110136号同学,就下载2013年以6开头的数据,看具体数据情况稍有变通)
  • 解压数据集,并保存在文本文件中
  • 对气象数据格式进行解析
  • 编写map函数,reduce函数
  • 将其权限作出相应修改
  • 本机上测试运行代码
  • 放到HDFS上运行
  • 将之前爬取的文本文件上传到hdfs上
  • 用Hadoop Streaming命令提交任务
  • 查看运行结果

本次的所有操作均在当前用户目录下的/temp/2018-05-09
通过wget下载压缩文件,命令如下:

wget -drc --accept-regex=REGEX -P data ftp://ftp.ncdc.noaa.gov/pub/data/noaa/2015/6*

在这之前,需要配置好环境,在.bashrc中加入下面的命令

export PATH=$PATH:/usr/local/hbase/bin:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
export HADOOP_HOME=/usr/local/hadoop
export STREAM=$HADOOP_HOME/share/hadoop/tools/lib/hadoop-streaming-*.jar

下载后解压,之后启动hdfs,将解压文件放入系统中,命令如下

start-dfs.sh
hdfs dfs -mkdir weather_data
hdfs dfs -put weather.txt weather_data/

文件放入系统后可以编写mapper.py了,主要代码如下:

import sysfor line in sys.stdin:line = line.strip()print('%s\t%d' % (line[15:23], int(line[87:92])))

reducer.py了,主要代码如下:

from operator import itemgetter
import syscurrent_date = None
current_temperature = 0
date = Nonefor line in sys.stdin:line = line.strip()date, temperature = line.split('\t', 1)try:temperature = int(temperature)except ValueError:continueif current_date == date:if current_temperature < temperature:current_temperature = temperatureelse:if current_date:print('%s\t%d' % (current_date, current_temperature))current_temperature = temperaturecurrent_date = dateif current_date == date:print('%s\t%d' % (current_date, current_temperature))

上面的reducer是求出最高气温,求出最低只需要将
if current_temperature < temperature:改为if current_temperature > temperature:

这里测试运行mapper和reducer,命令如下:

chmod a+x mapper.py
chmod a+x reducer.py
cat test.txt | python mapper.py | python reducer.py

test.txt中包含了部分的天气数据
下面是运行截图:

运行成功后可编写run.sh


hadoop jar $STREAM \
-D stream.non.zero.exit.is.failure=false \
-file /home/hadoop/temp/2018-05-09/mapper.py \
-mapper 'python /home/hadoop/temp/2018-05-09/mapper.py' \
-file /home/hadoop/temp/2018-05-09/reducer.py \
-reducer 'python /home/hadoop/temp/2018-05-09/reducer.py' \
-input /user/hadoop/weather_data/*.txt \
-output /user/hadoop/weather_output

运行run.sh

source run.sh

最后的运行结果通过cat打印截图:

/temp下的文件在链接中下载

转载于:https://www.cnblogs.com/lger/p/9016526.html

用mapreduce 处理气象数据集相关推荐

  1. Google Earth Engine(GEE)—— GRIDMET: 爱达荷大学网格化地表气象数据集

    GRIDMET: 爱达荷大学网格化地表气象数据集 格雷德地表气象数据集提供了1979年以来美国毗连地区的温度.降水.风.湿度和辐射的高空间分辨率(约4公里)的每日地表场.该数据集将来自PRISM的高分 ...

  2. 首个官方气象数据集公开,已训练出20多个“青出于蓝”的AI

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 让AI来做天气预报,可能是很有前途的一件事儿. 在今年AI Challenger天气预报赛道的采访中,中国气象局北京气象研究所副所长陈敏 ...

  3. Google Earth Engine(GEE)——美国近地表高精度实时气象数据集(2500米分辨率)

    实时中尺度分析 (RTMA) 是针对近地表天气条件的高空间和时间分辨率分析.该数据集包括 CONUS 在 2.5 公里处的每小时分析. 数据集可用性 2011-01-01T00:00:00Z–2022 ...

  4. 基于澳大利亚气象数据集可视化分析及降雨预测

      1:探索性分析代码流程    2:数字特征处理    3:非数字类型的特征处理    4:特征拼接    5:标签处理    6:数据集划分    7:模型评价    8:数据可视化 仅供大家参考 ...

  5. MapReduce 计算气温最大/最小/平均值

    本实验来自于 <Hadoop权威指南>第4班 第2章 项目地址:https://github.com/whirlys/BigData-In-Practice/tree/master/ch2 ...

  6. 《Hadoop权威指南》第二章 关于MapReduce

    <Hadoop权威指南>第二章 关于MapReduce 目录 使用Hadoop来数据分析 横向扩展 注:<Hadoop权威指南>重点学习摘要笔记 1. 使用Hadoop来数据分 ...

  7. mapreduce实战:统计美国各个气象站30年来的平均气温项目分析(MapReduce处理多文件数据)

    气象数据集 我们要写一个气象数据挖掘的程序.气象数据是通过分布在美国各地区的很多气象传感器每隔一小时进行收集,这些数据是半结构化数据且是按照记录方式存储的,因此非常适合使用 MapReduce 程序来 ...

  8. mapreduce实战:统计美国各个气象站30年来的平均气温项目分析

    气象数据集 我们要写一个气象数据挖掘的程序.气象数据是通过分布在美国各地区的很多气象传感器每隔一小时进行收集,这些数据是半结构化数据且是按照记录方式存储的,因此非常适合使用 MapReduce 程序来 ...

  9. 文件数据云计算学习笔记---Hadoop HDFS和MapReduce 架构浅析

    本文是一篇关于文件数据的帖子 媒介 Hadoop是一个基于Java的分布式麋集数据处理和数据分析的软件框架.Hadoop在很大程度上是受Google在2004年白皮书中论述的MapReduce技术的启 ...

  10. hadoop MapReduce实例解析

    1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...

最新文章

  1. 线性代数的问题:是否存在这样的矩阵,它满足正交对角化的条件,但它不是实对称矩阵呢?
  2. P1119 灾后重建(经典floyd)
  3. 设置vmware vsphere web client_Arduino+前端高级应用-通过WEB网页控制Arduino开发板上的LED灯...
  4. nodejs中文件,目录的操作(1)
  5. Python3 实现单例设计模式
  6. Ubuntu 8.04 Linux系统下面编译更新内核版本
  7. 大学计算机规划教材数据与计算,大学计算机应用基础教程高等院校计算机科学与技术规划教材.ppt...
  8. 搭建PC架构的ISCSI存储系统
  9. 十年维护专家的“秘籍
  10. np.percentile获取中位数、百分位数
  11. HDU-2057(16进制的输入输出)
  12. Android的双进程守护,广播和双进程
  13. jsp中对jstl一些标签的引用方式
  14. 智能插座常用的两种通信协议——WIFI和ZigBee
  15. 新一配:iTunes的历史版本【转载】
  16. 电脑数据误删除了怎么恢复?误删除数据恢复操作教程
  17. 将你的 Python 脚本转换为命令行程序
  18. c#怎么设置winform中dgv的表头边框线
  19. eclipse安装及使用
  20. vue-seamless-scroll 点击click失效

热门文章

  1. 对话张悦然:当年新概念作文大赛获奖者 现在怎样了
  2. 《玩转Django2.0》读书笔记-编写URL规则
  3. Vue CLI安装 Vue项目创建 Vue Devtools安装
  4. vue 报错 :属性undefined(页面成功渲染)
  5. Event事件-基础
  6. 在数据中心里SDN技术发展现状
  7. linux dstat工具
  8. RHEL5 Linux下Oracle 10 Client的安装明细
  9. java 泛型 上限_Java 泛型通配符上限和通配符下限
  10. breadcrumb 根据路由_简单的vue-router面包屑转化