实验六 MapReduce数据清洗-气象数据清洗

本博客介绍如何使用MapReduce对气象数据进行清洗,包括数据切分、非法数据过滤、天气情况转换、数据排序以及设定输入输出路径。通过编写WeatherMap、WeatherReduce和自定义分区类Auto实现数据处理,并提供了测试说明和代码实现。
摘要由CSDN通过智能技术生成

第1关:数据清洗

任务描述

本关任务:对数据按照一定规则进行清洗。

编程要求

根据提示,在右侧编辑器补充代码,对数据按照一定规则进行清洗。
数据说明如下:a.txt;
数据切分方式:一个或多个空格;
数据所在位置:/user/test/input/a.txt;

2005 01 01 16 -6 -28 10157 260 31 8 0 -9999

2005 01 01 16 -6 -28 10157 260 31 8 0 -9999
年 月 日 小时 温度 湿度 气压 风向 风速 天气情况 1h降雨量 6h降雨量
sky.txt;
数据切分方式:逗号;
数据所在位置:data/sky.txt或者/user/test/input/sky.txt

1,积云

1 积云
天气情况 cumulus
清洗规则:

将分隔符转化为逗号;
清除不合法数据:字段长度不足,风向不在[0,360]的,风速为负的,气压为负的,天气情况不在[0,10],湿度不在[0,100],温度不在[-40,50]的数据;
将a.txt与sky.txt的数据以天气情况进行join操作,把天气情况变为其对应的云属;
对进入同一个分区的数据排序; 排序规则: (1)同年同月同天为key; (2)按每日温度升序; (3)若温度相同则按风速升序; (4)风速相同则按压强降序。
设置数据来源文件路径及清洗后的数据存储路径: 数据来源路径为: /user/test/input/a.txt (HDFS); 清洗后的数据存放于:/user/test/output (HDFS)。
数据清洗后如下:

2005,01,01,16,-6,-28,10157,260,31,卷云,0,-9999

测试说明

平台会对你编写的代码进行测试:
评测之前先在命令行启动hadoop:start-all.sh;
Weather:封装对象;
WeatherMap:map端操作;
WeatherReduce:reduce端操作;
Auto:自定义分区;
WeatherTest:测试结果类。
具体本关的预期输出请查看右侧测试集。

因为大数据实训消耗资源较大,且map/reduce运行比较耗时,所以评测时间较长,大概在60秒左右,请耐心等待。

开始你的任务吧,祝你成功!

代码实现

命令行

start-all.sh

代码文件

step1/com/Weather.java
package com;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.WritableComparable;
/**封装对象*/
public class Weather implements WritableComparable<Weather> {
    //年
    private String year;
    //月
    private String month;
    //日
    private String day;
    //小时
    private String hour;
    //温度
    private int temperature;
    //湿度
    private String dew;
    //气压/压强
    private int pressure;
    //风向
    private String wind_direction;
    //风速
    private int wind_speed;
    //天气情况
    private String sky_condition;
    //1小时降雨量
    private String rain_1h;
    //6小时降雨量
    private String rain_6h;
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }
    public String 
  • 7
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值