Mapreduce做奇偶行相加

这篇博客介绍了如何利用MapReduce实现奇偶行数据的相加操作。首先讲解了RecordReader抽象类的作用,它是根据InputSplit创建键值对的。接着通过自定义RecordReader、输入格式和Map函数,实现了奇数行和偶数行数据的分离。在分区类中,将奇数行和偶数行的和分别写入不同的文件。最后,博主分享了程序的完整流程,并希望在即将到来的比赛中取得好成绩。
摘要由CSDN通过智能技术生成

后天比赛了 今天研究了一下mapreduce做奇偶行相加。回想自己学了一个多月的Mapreduce,也算是学有所获,希望后天的考试给自己交一份完美的答卷

首先准备前置知识:

RecordReader

抽象类的作用是根据给定的InputSplit 创建键/值对.InputSplit是面向 字节的Split视图,而RecordReader能够解析InputSplit并使其k可以被Mapper处理。
RecordReader从输入源中读取字节并将其转换成WritableComparable的键以及Writable的值。当创建自定义输入格式时,自定义数据类型也十分常见,这是将信息呈现给mapper的一种很好的面向对象的方式

我们的思路就是在奇数行的话,key%2==1,偶数行标志为key%2 = =0这样的话利用一个判断就 可以将奇数行之和 偶数行之和相加 然后写一个分区 将两个结果写进去。

一:

DefRecordReader继承RecordReader:

public static class DefRecordReader extends RecordReader<LongWritable, Text>{
   
        //起始位置
        private long start;
        //结束位置
        private long end;
        //当前位置
        private long pos;
        //文件输入流
        private FSDataInputStream fin = null;
        //自定义自己的key和value
        private LongWritable key =  null;
        private Text value = null;
        //定义行阅读器
        private LineReader reader = null;
        public void initialize(InputSplit split, TaskAttemptContext context)throws IOException,InterruptedException {
   
            //获取分片
            FileSplit fileSplit = (FileSplit) split;
            //获取起始位置
            start  =  fileSplit.getStart();
            //获取结束位置
            end = start+fileSplit.getLength();
            //获取输入分片的路径
            Path path = fileSplit.getPath();
            Configuration conf = context.getConfiguration();
            //根据路径获取文件系统
            FileSystem fs = path.getFileSystem(conf);
            //打开文件输入流
            fin  = fs.open(path);
            //找到开始位置开始读取
            fin.seek(start);
            //创建阅读器
            reader = new LineReader(fin);
            //将当期位置置为1
            pos = 1;
        }
         public boolean nextKeyValue(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值