Hadoop MapReduce--实现获取最大值和最小值

根据txt文档,获取age的最值


前言

例如:随着大数据的不断发展,hadoop这门技术也越来越重要,很多人都开启了学习大数据,本文就如何在海量数据中获取最值提供了思路。


提示:以下是本篇文章正文内容,下面案例可供参考

一、txt数据准备

python中有random和faker包(外部)给我们提供假的数据。我们使用python创建一个小型的txt文档,其中包括姓名,年龄,score(1分制)

以下是创建的txt文档(按照\t分行):
 

rose	27	0.6270426084076096
lisa	27	0.7321873119280536
black	22	0.8129257516728405
jack	27	0.8328363834853498
rose	22	0.9685109182738815
black	30	0.7727688951446979
lisa	21	0.24477509026919908
black	25	0.8785838355517068
rose	30	0.8901461639299959
black	26	0.5460709396256507

 

1.代码设计

1.创建对象并对其序列化。对象属性有min,max

2.mapper阶段对数据进行分割处理,context写入(StuBean,Text)的数据.

3.reduce阶段对mapper阶段的数据进行处理:获取最值。context写入(StuBean,Text)的数据

4.Driver实现整个流程

2.代码实现

StuBean代码如下(示例):

package com.atguigu.mapreduce.MaxMinscore;

import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

//input--排序
public class StuBean implements Writable {

    public int max;
    public int min;

    public int getMax() {
        return max;
    }

    public void setMax(int max) {
        this.max = max;
    }

    public int getMin() {
        return min;
    }

    public void setMin(int min) {
        this.min = min;
    }

    @Override
    public String toString() {
        return  max+"\t"+min;
    }

    @Override
    public void write(DataOutput out) throws IOException {
        out.writeInt(max);
        out.writeInt(min);
    }
    //     序列化读取
    @Override
    public void readFields(DataInput in) throws IOException {
        this.max =in.readInt();
        this.min =in.readInt();
    }

}

2.mapper阶段代码

import java.io.IOException;

//根据input类型,输出Text的主键,stuBean的数据
public class MinMaxMapper extends Mapper<Object,Text, Text,StuBean> {

    private StuBean sb=new StuBean();

    @Override
    protected void map(Object key, Text value, Mapper<Object, Text, Text, StuBean>.Context context) throws IOException, InterruptedException {
        //        获取一行
        String strs=value.toString();
        String[] split = strs.split("\t");
        String data=split[0];
        if (data==null){
            return ;
        }
        sb.setMin(Integer.parseInt(split[1]));
        sb.setMax(Integer.parseInt(split[1]));

        context.write(new Text(data),sb);
    }
}

3.reduce实现

package com.atguigu.mapreduce.MaxMinscore;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
//将mapper阶段的数据转化成视图bean和int
public class StuReducer extends Reducer<Text,StuBean,Text,StuBean> {

    private StuBean sb=new StuBean();
    @Override
    protected void reduce(Text key, Iterable<StuBean> values, Reducer<Text, StuBean, Text, StuBean>.Context context) throws IOException, InterruptedException {

        sb.setMax(0);
        sb.setMin(0);
        for (StuBean value:values){
            if (sb.getMin() == 0 ||value.getMin() <sb.getMin() ){
                    sb.setMin(value.getMin());
            }
            if (sb.getMax() == 0 ||value.getMax() >sb.getMax() ){
                 sb.setMax(value.getMax());
            }
        }
        context.write(key,sb);
    }
}

 4.driver实现

package com.atguigu.mapreduce.MaxMinscore;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
/*
只排序
 */
public class StuDriver {

    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        // 1 获取配置信息以及获取job对象
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf);

        // 2 关联本Driver程序的jar
        job.setJarByClass(StuDriver.class);

        // 3 关联Mapper和Reducer的jar
        job.setMapperClass(MinMaxMapper.class);
        job.setReducerClass(StuReducer.class);

        // 4 设置Mapper输出的kv类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(StuBean.class);

        // 5 设置最终输出kv类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(StuBean.class);

        // 6 设置输入和输出路径
        FileInputFormat.setInputPaths(job, new Path("D:\\desk\\ac.txt"));
        FileOutputFormat.setOutputPath(job, new Path("D:\\desk\\ac2"));

        // 7 提交job
        boolean result = job.waitForCompletion(true);
        System.exit(result ? 0 : 1);

    }
    }


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了hadoop mapreduce操作最值的基本使用,而mapre提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
hadoop-mapreduce-client-core是Hadoop分布式计算框架中的核心模块之一。它主要包含了Hadoop MapReduce的核心功能和API接口,是实现MapReduce编程模型的必备组件。 Hadoop MapReduce是一种用于大规模数据处理的编程模型,其核心思想是将大规模数据集分解成多个较小的数据块,分别在集群中的不同机器上进行处理,最后将结果整合。hadoop-mapreduce-client-core模块提供了与MapReduce相关的类和方法,方便开发者实现自定义的Map和Reduce任务。 具体来说,hadoop-mapreduce-client-core模块包含了以下重要组件和功能: 1. Job:Job表示一个MapReduce任务的定义和描述,包括输入路径、输出路径、Mapper和Reducer等。 2. Mapper:Mapper是MapReduce任务中的映射函数,它负责将输入数据转换成<key, value>键对的形式。 3. Reducer:Reducer是MapReduce任务中的归约函数,它按照相同的key将所有Mapper输出的value进行聚合处理。 4. InputFormat:InputFormat负责将输入数据切分成多个InputSplit,每个InputSplit由一个Mapper负责处理。 5. OutputFormat:OutputFormat负责将Reducer的输出结果写入指定的输出路径中。 使用hadoop-mapreduce-client-core模块,开发者可以基于Hadoop分布式计算框架快速开发并行处理大规模数据的应用程序。通过编写自定义的Mapper和Reducer,可以实现各种类型的分布式计算,如数据清洗、聚合分析、机器学习等。 总之,hadoop-mapreduce-client-core是Hadoop分布式计算框架中的核心模块,提供了实现MapReduce编程模型所需的基本功能和API接口。使用该模块,开发者可以利用Hadoop的分布式计算能力,高效地处理和分析大规模数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值