hadoop 天气案例

对下面一组气温数据进行处理,得到每个月份最高的两个气温值

2018-12-12 14:30 25c
2018-12-12 15:30 26c
2017-12-12 12:30 36c
2019-01-01 14:30 22c
2018-05-05 15:30 26c
2018-05-26 15:30 37c
2018-05-06 15:30 36c
2018-07-05 15:30 36c
2018-07-05 12:30 40c
2017-12-15 12:30 16c

输出格式如下:

2019-1 22
2018-12 26
2018-12 25
2018-7 40
2018-7 36
2018-5 37
2018-5 36
2017-12 36
2017-12 16

public class App {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration(true);
        conf.set("fs.defaultFS","hdfs://hadoop01:9000");     //windows下面运行添加一下两个配置
        conf.set("mapreduce.app-submission.cross-platform","true");
        conf.set("mapreduce.framework.name","local");

        Job job = Job.getInstance(conf);

        //设置jobName
        job.setJobName("myJob");
        job.setJarByClass(App.class);
        //配置map
        //mapper类
        job.setMapperClass(MyMapperClass.class);
        //输出的key类型
        job.setMapOutputKeyClass(TQ.class);
        //输出的value类型
        job.setMapOutputValueClass(IntWritable.class);

        //将输出的(K,V)=>(K,V,P)
        //job.setPartitionerClass(MyPartitioner.class);
        //数据在内存spill(溢写)之前先排序,注:继承WritableComparator
        job.setSortComparatorClass(MySortComparator.class);

        //配置reduce
        //根据需求确定分组的维度,继承自WritableComparator
        job.setGroupingComparatorClass(MyGrouping.class);
        //如map阶段根据年、月、温度三个维度排序,而reduce只根据年、月两个维度
        job.setReducerClass(MyReduce.class);

        Path input=new Path("/input/weather.txt");
        Path out=new Path("/output/weather");
        if(out.getFileSystem(conf).exists(out)){
            out.getFileSystem(conf).delete(out,true);
        }

        //数据来源 HDFS路径
        FileInputFormat.addInputPath(job,input);
        //计算结果的输出目录
        FileOutputFormat.setOutputPath(job,out);
        //job.setNumReduceTasks(2);

        job.waitForCompletion(true);
    }
}
public class TQ implements WritableComparable<TQ> {

    private int year;

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public int getTemp() {
        return temp;
    }

    public void setTemp(int temp) {
        this.temp = temp;
    }

    private int month;
    private int day;
    /**
        温度
     */
    private int temp;

    @Override
    public int compareTo(TQ other) {

        int c1= Integer.compare(this.getYear(),other.getYear());
        if(c1==0){
           return Integer.compare(this.getMonth(),other.getMonth());
        }
        return c1;
    }

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeInt(this.year);
        out.writeInt(this.month);
        out.writeInt(this.day);
        out.writeInt(this.temp);
    }

    @Override
    public void readFields(DataInput in) throws IOException {
        this.year=in.readInt();
        this.month=in.readInt();
        this.day=in.readInt();
        this.temp=in.readInt();
    }
}
/**
 * 根据年-月对map输出进行分组
 */
public class MyGrouping extends WritableComparator {
    public MyGrouping(){
        super(TQ.class,true);
    }
    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        TQ tq1 = (TQ) a;
        TQ tq2 = (TQ) b;
        if (tq1.getYear() == tq2.getYear() && tq1.getMonth() == tq2.getMonth()) {
            return 0;
        }
        return 1;
    }
}
public class MyMapperClass extends Mapper<LongWritable,Text,TQ, IntWritable> {
    TQ tq=new TQ();
    IntWritable outVal=new IntWritable();
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String[]splits= value.toString().split(" ");
        String[]date=splits[0].split("-");
        tq.setYear(Integer.parseInt(date[0]));
        tq.setMonth(Integer.parseInt(date[1]));
        tq.setDay(Integer.parseInt(date[2]));

        tq.setTemp(Integer.parseInt(splits[2].replace("c","")));
        outVal.set(tq.getTemp());
        context.write(tq,outVal);

    }
}
public class MyReduce extends Reducer<TQ, IntWritable, Text,IntWritable> {
    Text txtKey=new Text();

    @Override
    protected void reduce(TQ key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        Iterator<IntWritable> iterator = values.iterator();
        int flag=0;
        while (iterator.hasNext()) {
            if (flag == 2) {
                break;
            }
            txtKey.set(String.format("%s-%s",key.getYear(),key.getMonth()));

            IntWritable next = iterator.next();
            context.write(txtKey,next);
            flag++;
        }
    }
}
/**
    数据在内存spill(溢写)之前先排序,根据年月温度
 */
public class MySortComparator extends WritableComparator {
    public MySortComparator(){
        super(TQ.class,true);
    }

    @Override
    public int compare(WritableComparable a, WritableComparable b) {
        TQ tq1=(TQ)a;
        TQ tq2=(TQ)b;

        int c1= Integer.compare(tq1.getYear(),tq2.getYear());
            if(c1==0){
                int c2=Integer.compare(tq1.getMonth(),tq2.getMonth());
                if (c2 == 0) {
                    return -Integer.compare(tq1.getTemp(),tq2.getTemp());
                }
                return -c2;
            }
        return -c1;
    }
}

原文地址:https://www.cnblogs.com/yehuabin/p/10269248.html

时间: 2024-08-30 13:45:11

hadoop 天气案例的相关文章

Hadoop应用案例视频教程6折 低达4.5折

Greenplum Hadoop应用案例视频教程 活动时间:12月11日~12日活动规则:全场课程(品牌学习套餐除外)6折,VIP会员可享受折上折(例如:VIP5本身可以买课程7.5按照活动可享受低至4.5折),客户购买课程后联系修改价格咨询QQ:1840215592 基于Greenplum Hadoop分布式平台的大数据解决方案及商业应用案例剖析适合人群:高级课时数量:96课时用到技术:MapReduce.HDFS.Map-Reduce.Hive.Sqoop涉及项目:Greenplum Had

Hadoop经典案例Spark实现(七)——日志分析:分析非结构化文件

相关文章推荐 Hadoop经典案例Spark实现(一)--通过采集的气象数据分析每年的最高温度 Hadoop经典案例Spark实现(二)--数据去重问题 Hadoop经典案例Spark实现(三)--数据排序 Hadoop经典案例Spark实现(四)--平均成绩 Hadoop经典案例Spark实现(五)--求最大最小值问题 Hadoop经典案例Spark实现(六)--求最大的K个值并排序 Hadoop经典案例Spark实现(七)--日志分析:分析非结构化文件 1.需求:根据tomcat日志计算ur

Hadoop Mapreduce 案例 统计手机流量使用情况

需要被统计流量的文件内容如下: 1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 24681 2001363157995052 13826544101 5C-0E-8B-C7-F1-E0:CMCC 120.197.40.4 4 0 264 0 2001363157991076 13926435656 20-10-7A-28-CC-0A:CMCC 120.196.1

大数据学校(二)hadoop概述及Google的三篇论文

学习大数据,学什么?怎么学? 1.原理和运行机制.体系结构(非常重要)2.动手:搭建环境.写程序 目的:1.学习内容 2.熟悉一些名词 一.各章概述(Hadoop部分) (一).Hadoop的起源与背景知识 1.什么是大数据?两个例子.大数据的核心问题是什么? 举例: (1)商品推荐:问题1:大量的订单如何存储? 问题2:大量的订单如何计算? (2)天气预报:问题1:大量的天气数据如何存储? 问题2:大量的天气数据如何计算? 大数据的核心问题: (1)数据的存储:分布式文件系统(分布式存储)(2

hadoop知识体系

目录结构知识点还是挺全的,可以按照点学习. 一.Hadoop入门,了解什么是Hadoop 二.分布式文件系统HDFS,是数据库管理员的基础课程 1.Hadoop产生背景 2.Hadoop在大数据.云计算中的位置和关系 3.国内外Hadoop应用案例介绍 4.国内Hadoop的就业情况分析及课程大纲介绍 5.分布式系统概述 6.Hadoop生态圈以及各组成部分的简介 7.Hadoop核心MapReduce例子说明 1.分布式文件系统HDFS简介 2.HDFS的系统组成介绍 3.HDFS的组成部分详

思数云hadoop目录

全文检索.数据分析挖掘.推荐系统.广告系统.图像识别.海量存储.快速查询 l Hadoop介绍 n Hadoop来源与历史 n Hadoop版本 n Hadoop开源与商业 l HDFS系统架构 n NameNode功能与原理 n DataNode功能与原理 n SecondaryNameNode功能与原理 n HDFS读取写入流程 n 理解HDFS Block l Hadoop权限与安全 l Hadoop运行模式介绍 l 实验: n 搭建单机版.伪分布式.分布式集群 n Hadoop命令使用

Hadoop应用开发实战(flume应用开发、搜索引擎算法、Pipes、集群、PageRank算法)

Hadoop是2013年最热门的技术之一,通过北风网robby老师<深入浅出Hadoop实战开发>.<Hadoop应用开发实战>两套课程的学习,普通Java开发人员可以在最快的时间内提升工资超过15000.成为一位完全精通Hadoop应用开发的高端人才. Hadoop是什么,为什么要学习Hadoop? Hadoop是一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式

HADOOP背景介绍

1. HADOOP背景介绍 1.1 什么是HADOOP 1. HADOOP是apache旗下的一套开源软件平台 2. HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3. HADOOP的核心组件有 A. HDFS(分布式文件系统) B. YARN(运算资源调度系统) C. MAPREDUCE(分布式运算编程框架) 4. 广义上来说,HADOOP通常是指一个更广泛的概念--HADOOP生态圈 1.2 HADOOP产生背景 1. HADOOP最早起源于Nu

大数据Hadoop需要了解哪些内容?

一.Hadoop环境搭建 1. Hadoop生态环境介绍 2. Hadoop云计算中的位置和关系 3. 国内外Hadoop应用案例介绍 4. Hadoop概念.版本.历史 5. Hadoop核心组成介绍及hdfs.mapreduce体系结构 6. Hadoop独立模式安装和测试 7. Hadoop的集群结构 8. Hadoop伪分布的详细安装步骤 9. 通过命令行和浏览器观察Hadoop 10. Hadoop启动脚本分析 11. Hadoop完全分布式环境搭建 12. Hadoop安全模式.回收