首页 > 其他分享 >12-3实验

12-3实验

时间:2024-12-03 09:13:46浏览次数:7  
标签:12 Text hadoop job 实验 key new class

public static class WorldCount_Mapper extends Mapper<LongWritable, Text, Text, IntWritable>{
 
        @Override
        protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context)
                throws IOException, InterruptedException {
            System.out.println("split:<" + key + ","+ value + ">" );
            String[] strs = value.toString().split(" ");
            for (String string : strs) {
                System.out.println("map:<" + key + ","+ value + ">" );
                context.write(new Text(string),new IntWritable(1));
            }
        }
    }
public static class WorldCount_Reducer extends Reducer<Text, IntWritable, Text, IntWritable>{
 
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values,
                Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            int index  = 0;
            for (IntWritable intWritable : values) {
                System.out.println("reduce:<" + key + ","+ intWritable + ">" );
                index  += intWritable.get();
            }
            context.write(key,new IntWritable(index));
        }
    }
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Job job = Job.getInstance();
        job.setJarByClass(WorldCount.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        job.setMapperClass(WorldCount_Mapper.class);
        job.setReducerClass(WorldCount_Reducer.class);
        FileInputFormat.addInputPath(job,new Path("hdfs://192.168.100.123:8020/input"));
        FileOutputFormat.setOutputPath(job, new Path("hdfs://192.168.100.123:8020/output"));
        job.waitForCompletion(true);
    }
package hadoop.mapreduce;
 
import java.io.IOException;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 
public class MyWordCount {
    /*
     *     KEYIN:是map阶段输入的key(偏移量)
     *     VALUEIN:是map阶段输入的value(文本文件的内容--行)
     *  KEYOUT:是map阶段输出的key(单词)
     *  VALUEOUT:是map阶段输出的value(单词的计数--1)
     *  
     *  Java基本数据类型:
     *      int、short、long、double、float、char、boolean、byte
     *  hadoop数据类型
     *      IntWritable、ShortWritable、LongWritable、DoubleWritable、FloatWritable
     *      ByteWritable、BooleanWritable、NullWritable、Text
     *      Text:使用utf8编码的文本类型
     */
    public static class WordCount_Mapper extends Mapper<LongWritable, Text, Text, IntWritable>{
        @Override    //方法的重写
        protected void map(LongWritable key, Text value, Mapper<LongWritable, Text,
                Text, IntWritable>.Context context)
                throws IOException, InterruptedException {
            String[] line = value.toString().split(" ");    //将获取到的数据以空格进行切分成一个个单词
            for (String word : line) {     //遍历单词的数组
                context.write(new Text(word), new IntWritable(1));  //单词进行计数,将中间结果写入context
            }
        }                                                
    }
    
    /*
     * KEYIN:reduce阶段输入的key(单词)
     * VALUEIN:reduce阶段输入的value(单词的计数)
     * KEYOUT:reduce阶段输出的key(单词)
     * VALUEOUT:reduce阶段输出的value(单词计数的总和)
     * 
     * reduce方法中做以下修改:
     *     将Text arg0改为Text key
     *  将Iterable<IntWritable> arg1改为Iterable<IntWritable> value
     *  将Context arg2修改为Context context
     */
    public static class WordCount_Reducer extends Reducer<Text, IntWritable, Text, IntWritable>{
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values,
                Reducer<Text, IntWritable, Text, IntWritable>.Context context)
                        throws IOException, InterruptedException {
            int sum = 0;    //创建一个变量,和
            for (IntWritable intWritable : values) {        //遍历相同key单词的计数
                sum += intWritable.get();    //将相同key单词的计数进行累加
            }
            context.write(key, new IntWritable(sum));    //将计算的结果写入context
        }
    }
 
    //提交工作
    public static void main(String[] args) throws Exception {
        
        String inPath= "hdfs://192.168.182.10:8020/input.txt";
        String outPath = "hdfs://192.168.182.10:8020/output/";
        Configuration conf = new Configuration();
        Job job = Job.getInstance();    //创建Job对象job
        FileSystem fs = FileSystem.get(conf);
        if (fs.exists(new Path(outPath))) {
            fs.delete(new Path(outPath), true);
        }
        job.setJarByClass(MyWordCount.class);     //设置运行的主类MyWordCount
        job.setMapperClass(WordCount_Mapper.class);     //设置Mapper的主类
        job.setReducerClass(WordCount_Reducer.class);     //设置Reduce的主类
        job.setOutputKeyClass(Text.class);     //设置输出key的类型
        job.setOutputValueClass(IntWritable.class);     //设置输出value的类型
        //设置文件的输入路径(根据自己的IP和HDFS地址设置)
        FileInputFormat.addInputPath(job, new Path(inPath));    
        //设置计算结果的输出路径(根据自己的IP和HDFS地址设置)
        FileOutputFormat.setOutputPath(job, new Path(outPath));
        System.exit((job.waitForCompletion(true)?0:1));     //提交任务并等待任务完成
    }
}

 

标签:12,Text,hadoop,job,实验,key,new,class
From: https://www.cnblogs.com/kuandong24/p/18583286

相关文章

  • 软件设计:实验 23:策略模式
    实验23:策略模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解策略模式的动机,掌握该模式的结构;2、能够利用策略模式解决实际问题。 [实验任务一]:旅行方式的选择旅游的出行方式有乘坐飞机旅行、乘火车旅行和自行车游,不同的旅游方式有不同的实现过程,客户可......
  • 1202-数据流中的中位数
    最小栈leetcode295.题目大意:给定一个数据流,实现一个以查找中位数为方法的类,该类需要有初始化构造方法、新增数据值和查找中位数的方法解题思路:主要难点是想用什么方法,这题肯定不能来一个数字就给数据排序,得用到数据结构,也就是小顶堆和大顶堆,小顶堆存储最大值部分,大顶堆存储最......
  • 【双堆懒删除】codeforces 1294 D. MEX maximizing
    前言双堆懒删除当需要维护若干元素中的最大值(或最小值)时,可以用一个堆维护,但是堆只擅长处理堆顶元素,对堆中任意元素的处理就束手无策了。此时,可以引入另外一个堆,我们定义原来的堆为保存堆\(ex\),新的堆为懒删除堆\(de\)。那么当需要从保存堆中删除任意一个元素时,可以先将元素放......
  • 《痞子衡嵌入式半月刊》 第 112 期
    痞子衡嵌入式半月刊:第112期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。本期刊是开源项目(GitHub:JayHeng/pzh-mcu-bi-weekly),欢迎提交issue,投稿或推荐你知道的嵌入式那些事儿。上期回顾:《痞子衡嵌入式半月......
  • 20241202: 52. N 皇后 II
    n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回 n皇后问题 不同的解决方案的数量。 classSolution:deftotalNQueens(self,n:int)->int:ans=0col=[False]*......
  • 实验5
    task3:1#pragma23#include<iostream>4#include<string>56usingnamespacestd;78classMachinePets{9public:10MachinePets(conststring&s="");11public:12stringget_nickname()con......
  • 实验5 继承和多态
    实验任务3pets.hpp1#ifndefPETS_HPP2#definePETS_HPP3#include<string>456classMachinePets{7public:8MachinePets(conststd::strings);9virtualstd::stringtalk()=0;10std::stringget_nickname()const;11......
  • 2024.12.2 周一
    2024.12.2周一Q1.1100给定一个数字(32位以内),使用1,0,-1构造二进制数位,同时保证不能有相邻的非0数存在。Q2.1200给定2个相同数位的数(<=1e100),任意操作:交换2数中相同位的数字使两数之积最大。Q3.1300前缀后缀板题Q4.1400给定n,m(<=2e6)。a:1n,b:1m,问:满足a+b是b*g......
  • 实验5
    pets.hpp#include<iostream>#include<vector>#include<string>usingnamespacestd;usingstd::string;classMachinePets{protected:stringnickname;public:MachinePets(conststrings):nickname{s}{}......
  • 实验五
    task3:pets.hpp#pragmaonce#include<iostream>usingnamespacestd;classMachinePets{public:MachinePets(conststring&s):nickname{s}{}virtualstringtalk()const=0;stringget_nickname()const{returnnickname......