hadoop程序MapReduce之average

需求:求多门课程的平均值。

样板:math.txt

zhangsan 90

lisi 88

wanghua 80

china.txt

zhangsan 80
lisi 90
wanghua 88

输出:zhangsan 85

lisi 89

wanghua 84

分析部分:

mapper部分分析:

1、<k1,v1>k1代表:一行数据的编号位置,v1代表:一行数据。

2、<k2,v2>k2代表:名字,v2代表:分数。

reduce部分分析:

3、<k3,v3>k3代表:相同key(名字),v3代表:list<int>。

4、统计输出<k4,v4>k4代表:名字,v4代表:平均值。

程序部分:

AverageMapper类:

package com.cn.average;

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class AverageMapper extends Mapper<Object, Text, Text, IntWritable> {
    @Override
    protected void map(Object key, Text value, Context context)
            throws IOException, InterruptedException {
        String [] strings = new String[2];
        int i = 0;
        String line = value.toString();
        StringTokenizer tokenizerVal = new StringTokenizer(line);
        while (tokenizerVal.hasMoreElements()) {
            strings[i] = tokenizerVal.nextToken();
            i++;
        }
        context.write(new Text(strings[0]), new IntWritable(Integer.parseInt(strings[1])));
    }
}

AverageReduce类:

package com.cn.average;

import java.io.IOException;

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

public class AverageReduce extends Reducer<Text, IntWritable, Text, IntWritable>{
     @Override
    protected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {
         int sum = 0;
         int i = 0;
         for(IntWritable value : values){
             sum += value.get();
             i++;
         }
         context.write(key, new IntWritable(sum/i));
    }
}

DataAverage类:

package com.cn.average;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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 org.apache.hadoop.util.GenericOptionsParser;

/**
 * 平均值
 * @author root
 *
 */
public class DataAverage {
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
        if (otherArgs.length != 2) {
           System.err.println("Usage: DataAverage  ");
           System.exit(2);
        }
        //创建一个job
        Job job = new Job(conf, "Data Average");
        job.setJarByClass(DataAverage.class);

        //设置文件的输入输出路径
        FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));

        //设置mapper和reduce处理类
        job.setMapperClass(AverageMapper.class);
        job.setReducerClass(AverageReduce.class);

      //设置输出key-value数据类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

       //提交作业并等待它完成
       System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

每天总结一点点,总有不一样的收获。

时间: 2024-10-10 16:04:26

hadoop程序MapReduce之average的相关文章

hadoop程序MapReduce之DataSort

需求:对文件中的数据进行排序. 样本:sort.log 10 13 10 20 输出:1 10 2 10 3 13 4 20 分析部分: mapper分析: 1.<k1,v1>k1代表:行位置编号,v1代表:一行数据 2.<k2,v2>k2代表:一行数据,v2代表:此处为1. reduce分析: 3.<k3,v3>k3代表:相同的key,v3代表:list<int> 4.合并输出:<k4,v4>k4代表:递增编号,v4代表:key值. 程序部分:

hadoop程序MapReduce之DataDeduplication

需求:去掉文件中重复的数据. 样板:data.log 2016-3-1 a 2016-3-2 b 2016-3-2 c         2016-3-2 b 输出结果: 2016-3-1 a 2016-3-2 b 2016-3-2 c 解决思路:取出一行数据,经过mapper处理后,利用MapReduce默认的将相同的key合并后交给reduce处理的原则,这样可以达到数据去重解决问题. MapReduce分析设计: Mapper分析设计: 1.<k1,v1>,k1代表:每行数据的行号,v1代

hadoop程序MapReduce之WordCount

需求:统计一个文件中所有单词出现的个数. 样板:word.log文件中有hadoop hive hbase hadoop hive 输出:hadoop 2 hive 2 hbase 1 MapReduce设计方式: 一.Map过程<k,v>键值队的设计: 1.按行将文本文件切割成 <k1,v1>,k1代表:行在文件中的位置,v1代表:一行数据.多少个<k1,v1>就调用多少次map()方法. 2.在map()方法中将一行数据按照空格继续分割成<k2,v2>,

hadoop程序MapReduce之SingletonTableJoin

需求:单表关联问题.从文件中孩子和父母的关系挖掘出孙子和爷奶关系 样板:child-parent.txt xiaoming daxiong daxiong alice daxiong jack 输出:xiaoming alice xiaoming jack 分析设计: mapper部分设计: 1.<k1,k1>k1代表:一行数据的编号位置,v1代表:一行数据. 2.左表:<k2,v2>k2代表:parent名字,v2代表:(1,child名字),此处1:代表左表标志. 3.右表:&

hadoop程序MapReduce之MaxTemperature

需求:求每年当中最高的温度 样本:temp.log 2016080623 2016072330 2015030420 输出结果:2016 30 2015 20 MapReduce分析设计: Mapper分析设计: 1.将文件分割成键值队<k1,v1>,k1代表:行位置,v1代表:一行数据. 2.将这行数据进行分割成<k2,v2>,k2代表:年份,v1代表:温度. Reduce分析设计: 3.将一些列合并后的相同key的一系列温度<k3,v3>,k3代表:年份,v1代表:

Hadoop之MapReduce程序应用三

摘要:MapReduce程序进行数据去重. 关键词:MapReduce   数据去重 数据源:人工构造日志数据集log-file1.txt和log-file2.txt. log-file1.txt内容 2014-1-1    wangluqing 2014-1-2    root 2014-1-3   root 2014-1-4  wangluqing 2014-1-5  root 2014-1-6  wangluqing log-file2.txt内容 2014-1-1  root 2014-

用PHP编写Hadoop的MapReduce程序

用PHP写hadoop的mapreduce程序 Hadoop本身是Java写的,所以,给hadoop写mapreduce,人们会自然地想到java 但hadoop里面有个contrib叫做hadoop streaming,这是一个小工具,为hadoop提供streaming支持,使得任何支持标准IO (stdin, stdout)的可执行程序都能成为hadoop的mapper 或者 reducer 例如:hadoop jar hadoop-streaming.jar -input SOME_IN

Hadoop之MapReduce程序分析

摘要:Hadoop之MapReduce程序包括三个部分:Mapper,Reducer和作业执行.本文介绍和分析MapReduce程序三部分结构. 关键词:MapReduce   Mapper  Reducer   作业执行 MapReduce程序包括三个部分,分别是Mapper,Reducer和作业执行. Mapper 一个类要充当Mapper需要继承MapReduceBase并实现Mapper接口. Mapper接口负责数据处理阶段.它采用形式为Mapper<K1,V1,K2,V2>的Jav

Hadoop之MapReduce程序应用一

摘要:MapReduce程序处理专利数据集. 关键词:MapReduce程序   专利数据集 数据源:专利引用数据集cite75_99.txt.(该数据集可以从网址http://www.nber.org/patents/下载) 问题描述: 读取专利引用数据集并对它进行倒排.对于每一个专利,找到那些引用它的专利并进行合并.top5输出结果如下: 1                                3964859, 4647229 10000