MapReduce编程(七)
  fztgkkRjHIsV 2023年11月02日 43 0


一、问题描述

任务要求–现有一批电话通信清单,记录了用户A拨打用户B的记录–需要做一个倒排索引,记录拨打给用户B的所有用户A
reverse.txt

13599999999 10086
13899999999 120
13544444444 18955555555
18922222222 18955555555
18900000000 120
13544444444 120
13544444444 110
13544444444 119
13899999999 18955555555


要求使用MapReduce  主叫以‘ | ’分割


二、算法思路




MapReduce编程(七)_Text



三、MapReduce程序



package com.cl.hadoop.sort;

import com.cl.hadoop.FileUtil;
import org.apache.hadoop.fs.Path;
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;

import java.io.IOException;

public class ReverseSort {

    public static class Map extends Mapper<LongWritable, Text, Text, Text> {
        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String[] lineSplit = value.toString().split(" ");
            String anum = lineSplit[0];
            String bnum = lineSplit[1];
            context.write(new Text(anum), new Text(bnum));
        }
    }

    public static class Reduce extends Reducer<Text, Text, Text, Text> {
        public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
            StringBuffer out = new StringBuffer();
            for (Text valus : values) {
                out.append(valus).append("|");
            }
            context.write(key, new Text(out.substring(0, out.length() - 1).toString()));

        }
    }

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

        FileUtil.deleteDir("output");
        String[] otherargs = new String[]{"input/sort", "output"};
        if (otherargs.length != 2) {
            System.err.println("Usage: mergesort <in> <out>");
            System.exit(2);
        }

        Job job = Job.getInstance();
        job.setJarByClass(ReverseSort.class);
        job.setMapperClass(ReverseSort.Map.class);
        job.setReducerClass(ReverseSort.Reduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
        FileInputFormat.addInputPath(job, new Path(otherargs[0]));
        FileOutputFormat.setOutputPath(job, new Path(otherargs[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }

}

运行之后,输出结果如下。


13544444444	119|110|120|18955555555
13599999999	10086
13899999999	18955555555|120
18900000000	120
18922222222	18955555555


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  EHQgR1Njg8Ca   2023年11月30日   36   0   0 htmlapacheapachehtml
fztgkkRjHIsV