Hadoop天气数据分析案例

需求:

找出每个月气温最高的2天(案例测试)

数据源:

1949-10-01 14:21:02    34c

1949-10-01 19:21:02    38c

1949-10-02 14:01:02    36c

1950-01-01 11:21:02    32c

1950-10-01 12:21:02    37c

1951-12-01 12:21:02    23c

1950-10-02 12:21:02    41c

1950-10-03 12:21:02    27c

1951-07-01 12:21:02    45c

1951-07-02 12:21:02    46c

1951-07-03 12:21:03    47c

项目结构:

TQtest.java

package com.tq.test;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class TQtest {

       public static void main(String[] args) throws IOException,  ClassNotFoundException, InterruptedException {

             // TODO Auto-generated method stub

             // 1配置

             Configuration conf = new Configuration();

             Job job = Job.getInstance(conf);

             job.setJarByClass(TQtest.class);

             job.setJobName("tq");

             // 2设置输入路径和输出路径

             Path inpath = new Path("/tq/input");

             FileInputFormat.addInputPath(job, inpath);

             Path outpath = new Path("/tq/output");

             if (outpath.getFileSystem(conf).exists(outpath))

                    outpath.getFileSystem(conf).delete(outpath, true);

             FileOutputFormat.setOutputPath(job, outpath);

             // 3设置Mapper

             job.setMapperClass(Tmapper.class);

             job.setMapOutputKeyClass(Tq.class);

             job.setMapOutputValueClass(IntWritable.class);

             // 4 自定义比较器

             job.setSortComparatorClass(TqSortComparator.class);

             // 5自定义分区器

             job.setPartitionerClass(TPartitioner.class);

             // 6 自定义组排序

             job.setGroupingComparatorClass(TGroupCmparator.class);

             // 7 设置reducetask数量

             job.setNumReduceTasks(2);

             // 8 设置reducer

             job.setReducerClass(Treducer.class);

             // 9

             job.waitForCompletion(true);

       }

}

Tmapper.java

package com.tq.test;

 

 

import java.io.IOException;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

 

 

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;

import org.jboss.netty.util.internal.StringUtil;

 

 

public class Tmapper extends Mapper<LongWritable, Text, Tq, IntWritable> {

 

 

    Tq tkey = new Tq();

    IntWritable tvalue = new IntWritable();

 

 

    @Override

    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        // 获得时间 温度数组

        String[] words = StringUtil.split(value.toString(), '\t');

        String pattern = "yyyy-MM-dd";

        SimpleDateFormat sdf = new SimpleDateFormat(pattern);

        try {

            // 处理日期

            Date date = sdf.parse(words[0]);

            Calendar cal = Calendar.getInstance();

            cal.setTime(date);

            tkey.setYear(cal.get(Calendar.YEAR));

            tkey.setMonth(cal.get(Calendar.MONTH) + 1);

            tkey.setDay(cal.get(Calendar.DAY_OF_MONTH));

            // 处理温度

            int temp = Integer.parseInt(words[1].substring(0, words[1].lastIndexOf("c")));

            tkey.setTemp(temp);

            tvalue.set(temp);

            context.write(tkey, tvalue);

        } catch (ParseException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

 

 

    }

}

 

 

Tq.java

package com.tq.test;

 

 

import java.io.DataInput;

import java.io.DataOutput;

import java.io.IOException;

 

 

import org.apache.hadoop.io.WritableComparable;

 

 

public class Tq implements WritableComparable<Tq> {

 

 

    private int year;

    private int month;

    private int day;

    private int temp;

 

 

    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;

    }

 

 

    public void write(DataOutput out) throws IOException {

        out.writeInt(this.getYear());

        out.writeInt(this.getMonth());

        out.writeInt(this.getDay());

        out.writeInt(this.getTemp());

 

 

    }

 

 

    public void readFields(DataInput in) throws IOException {

        this.setYear(in.readInt());

        this.setMonth(in.readInt());

        this.setDay(in.readInt());

        this.setTemp(in.readInt());

    }

 

 

    public int compareTo(Tq o) {

        int c1 = Integer.compare(this.getYear(), o.getYear());

        if (c1 == 0) {

            int c2 = Integer.compare(this.getMonth(), o.getMonth());

            if (c2 == 0) {

                return Integer.compare(this.getDay(), o.getDay());

            }

            return c2;

        }

        return c1;

    }

 

 

    @Override

    public String toString() {

        return year + "-" + month + "-" + day;

    }

 

 

}

TqSortComparator.java

package com.tq.test;

 

 

import org.apache.hadoop.io.WritableComparable;

import org.apache.hadoop.io.WritableComparator;

 

 

/**

* 实现天气 年月正序,温度倒序

*/

public class TqSortComparator extends WritableComparator {

    Tq t1 = null;

    Tq t2 = null;

 

 

    public TqSortComparator() {

        super(Tq.class, true);

    }

 

 

    public int compare(WritableComparable a, WritableComparable b) {

        t1 = (Tq) a;

        t2 = (Tq) b;

        int c1 = Integer.compare(t1.getYear(), t2.getYear());

        if (c1 == 0) {

            int c2 = Integer.compare(t1.getMonth(), t2.getMonth());

            if (c2 == 0) {

                return -Integer.compare(t1.getTemp(), t2.getTemp());

            }

            return c2;

        }

        return c1;

    }

}

 

TPartitioner.java

package com.tq.test;

 

 

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.mapreduce.Partitioner;

 

 

public class TPartitioner extends Partitioner<Tq, IntWritable> {

 

 

    @Override

    public int getPartition(Tq key, IntWritable value, int numPartitions) {

        // TODO Auto-generated method stub

        return key.getYear() % numPartitions;

    }

 

 

}

 

TGroupCmparator.java

package com.tq.test;

 

 

import org.apache.hadoop.io.WritableComparable;

import org.apache.hadoop.io.WritableComparator;

 

 

public class TGroupCmparator extends WritableComparator {

    Tq t1 = null;

    Tq t2 = null;

 

 

    public TGroupCmparator() {

        super(Tq.class, true);

    }

 

 

    public int compare(WritableComparable a, WritableComparable b) {

        t1 = (Tq) a;

        t2 = (Tq) b;

        int c1 = Integer.compare(t1.getYear(), t2.getYear());

        if (c1 == 0) {

            return Integer.compare(t1.getMonth(), t2.getMonth());

        }

        return c1;

    }

}

 

Treducer.java

package com.tq.test;

 

 

import java.io.IOException;

 

 

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Reducer;

 

 

public class Treducer extends Reducer<Tq, IntWritable, Text, IntWritable> {

    Text tkey = new Text();

    IntWritable tval = new IntWritable();

 

 

    @Override

    protected void reduce(Tq key, Iterable<IntWritable> vals, Context context)

            throws IOException, InterruptedException {

        int flag = 0;

        int day = 0;

        for (IntWritable val : vals) {

            if (flag == 0) {

                tkey.set(key.toString());

                tval.set(val.get());

                context.write(tkey, tval);

                flag++;

                day = key.getDay();

            }

            if (flag != 0 && day != key.getDay()) {

                tkey.set(key.toString());

                tval.set(val.get());

                context.write(tkey, tval);

                return;

            }

        }

    }

}

 

 

打包成jar,放到linux虚拟机上执行(要先启动hdfs yarn zookeeper DFSZKFailoverController)

hadoop jar tq.jar com.tq.test.TQtest

执行结果:

 

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hadoop和Spark是目前最流行的大数据处理框架,它们可以用于处理海量数据,进行数据分析和挖掘。以下是一些Hadoop和Spark数据分析案例: 1. 电商网站用户行为分析:通过Hadoop和Spark对电商网站的用户行为数据进行分析,可以了解用户的购买习惯、喜好等信息,从而优化产品推荐、促销策略等。 2. 金融风险管理:通过Hadoop和Spark对金融数据进行分析,可以识别潜在的风险和异常情况,帮助金融机构进行风险管理和预测。 3. 医疗数据分析:通过Hadoop和Spark对医疗数据进行分析,可以发现疾病的规律和趋势,提高医疗服务的质量和效率。 4. 航空公司客户分析:通过Hadoop和Spark对航空公司的客户数据进行分析,可以了解客户的旅行习惯、偏好等信息,从而优化航班安排、服务等。 5. 社交媒体分析:通过Hadoop和Spark对社交媒体的数据进行分析,可以了解用户的兴趣、情感等信息,从而优化广告投放、内容推荐等。 这些案例只是Hadoop和Spark数据分析的冰山一角,随着大数据技术的不断发展,将会有更多的应用场景涌现。 ### 回答2: 随着大数据时代的到来,数据分析成为了各个企业所关注的重点。而在数据分析中,hadoop和spark的应用是不可避免的。hadoop是一种分布式计算平台,可以帮助企业轻松地实现大规模数据的存储和处理;而spark则是一种基于内存计算的框架,可以快速地进行数据处理和分析。下面,我们将分别介绍hadoop和spark在数据分析中的应用,并提供相应的案例Hadoop数据分析中的应用 1. 数据仓库 hadoop是一种分布式计算平台,可以轻松地实现大规模数据的存储和处理。因此,hadoop非常适合用作数据仓库。通过hadoop的分布式存储技术和MapReduce计算框架,可以将数据存储在分布式文件系统HDFS中,并使用Hive进行数据仓库的建设。通过这种方式,企业可以将各个业务系统中的数据进行整合,便于进行多维度数据分析和数据挖掘。 2. 实时数据分析 hadoop不仅适用于离线数据分析,还可以用于实时数据分析。企业可以通过hadoop的基于流的处理框架Storm进行实时数据处理。Storm可以帮助企业处理流式数据,进行实时的数据过滤、转换、聚合和分析。 Spark在数据分析中的应用 1. 机器学习 machine learning是数据分析领域的一个热门方向,而spark作为一种高性能的计算框架,可以帮助企业快速地进行机器学习模型的训练和应用。通过Spark的机器学习库MLlib,企业可以使用spark实现各种机器学习算法,并在大规模数据上进行训练和应用。例如,在电商领域,可以利用MLlib进行用户画像、商品推荐等个性化服务。 2. 数据挖掘 Spark可以帮助企业进行数据挖掘,提取数据中的关键信息。例如,在金融领域,可以利用Spark进行欺诈检测和预测;在航空领域,可以利用Spark进行飞行数据的分析和预测,提高飞行安全性。 以上描述的案例只是hadoop和spark在数据分析中的一个小部分应用,实际上hadoop和spark的应用场景非常广泛,各个领域的企业都可以根据自己的业务需求选择适当的技术。 ### 回答3: Hadoop和Spark是当今世界上最流行的开源大数据处理框架,它们被广泛应用于处理、存储和分析以往难以处理的大数据集。下面我们来说一说Hadoop Spark数据分析案例Hadoop是一个开源的分布式文件系统和处理框架,用于处理大规模数据集,这里我们来讲解一下Hadoop案例。 1. 零售行业客户购物行为数据分析 Hadoop用于分析零售行业客户购物行为。基于Hadoop分布式框架,可以有效地进行数据导入、数据处理、结果分析和数据可视化等功能。借助Hive和Pig,可以实现更加复杂的数据分析。 2. 银行信用卡交易监控分析 Hadoop可以分析银行信用卡交易数据,从而提供关键的商业洞察力。通过挖掘海量数据,可以揭示模式和趋势,帮助银行识别潜在问题和机会,改善客户体验和提高利润率。 现在来说一说Spark的案例。 Spark是一个快速通用的开源处理引擎,提供了内置的数据处理API、图形处理API和机器学习API。这里我们来讲一下Spark的分类和语音处理案例。 1. 分类建模 Spark MLlib提供了各种算法和机器学习工具,可以适用于各种类型的分类建模,例如预测客户流失、预测贷款偿还率等。 2. 语音处理 Spark可以用于语音处理,例如从音频中提取有用的特征,以支持语音识别、情感分析等其他用途。近年来,很多国际大厂商都在利用Spark进行语音处理,例如IBM Watson等。 总之,Hadoop和Spark在大数据处理和分析领域均有着极大的助益。Hadoop被广泛应用于处理海量数据,Spark则更趋向于统一的数据处理引擎。在实际应用场景中,两者可以相互搭配和协调使用,提供更加完整和高效的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值