MapReduce 按照Value值进行排序输出

简介: 文件输入: A    1 B    5 C    4 E    1 D    3 W    9 P    7 Q    2 文件输出: W    9 P    7 B    5 C    4 D    3 Q    2 E    1 A    1 代码如下: package comparator;import java.

文件输入:

A    1
B    5
C    4
E    1
D    3
W    9
P    7
Q    2

文件输出:

W    9
P    7
B    5
C    4
D    3
Q    2
E    1
A    1

代码如下:

package comparator;

import java.io.IOException;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.IntWritable.Comparator;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
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 comparator{

    /**
     * @param args
     * @throws IOException 
     * @throws IllegalArgumentException 
     * @throws InterruptedException 
     * @throws ClassNotFoundException 
     */
    public static class myComparator extends Comparator {
        @SuppressWarnings("rawtypes")
        public int compare( WritableComparable a,WritableComparable b){
            return -super.compare(a, b);
        }
        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
            return -super.compare(b1, s1, l1, b2, s2, l2);
        }
    }
    
    public static class Map extends Mapper<Object,Text,IntWritable,Text>{
        public void map(Object key,Text value,Context context) throws NumberFormatException, IOException, InterruptedException{
            String[] split = value.toString().split("\t");
            context.write(new IntWritable(Integer.parseInt(split[1])),new Text(split[0]) );
        }
    }
    public static class Reduce extends Reducer<IntWritable,Text,Text,IntWritable>{
        public void reduce(IntWritable key,Iterable<Text>values,Context context) throws IOException, InterruptedException{
            for (Text text : values) {
                context.write( text,key);
            }
        }
    }
    public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException {
        // TODO Auto-generated method stub

           Job job = new Job();
           job.setJarByClass(comparator.class);
           
           job.setNumReduceTasks(1);   //设置reduce进程为1个,即output生成一个文件
           
           job.setMapperClass(Map.class);      
           job.setReducerClass(Reduce.class);
           
           job.setMapOutputKeyClass(IntWritable.class);
            job.setMapOutputValueClass(Text.class);
           
           job.setOutputKeyClass(Text.class);    //为job的输出数据设置key类
           job.setOutputValueClass(IntWritable.class);   //为job的输出设置value类
           
           job.setSortComparatorClass( myComparator.class);           //自定义排序
           
           FileInputFormat.addInputPath(job, new Path(args[0]));   //设置输入文件的目录
           FileOutputFormat.setOutputPath(job,new Path(args[1])); //设置输出文件的目录
           
           System.exit(job.waitForCompletion(true)?0:1);   //提交任务
    }

}


相关文章
|
分布式计算 Java 大数据
MapReduce基础编程之按日期统计及按日期排序(下)
MapReduce基础编程之按日期统计及按日期排序(下)
295 0
MapReduce基础编程之按日期统计及按日期排序(下)
|
分布式计算 Hadoop Java
【Big Data】Hadoop--MapReduce经典题型实战(单词统计+成绩排序+文档倒插序列)
🍊本文使用了3个经典案例进行MapReduce实战🍊参考官方源码,代码风格较优雅🍊解析详细。
268 0
|
存储 分布式计算 Hadoop
MapReduce排序
MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。任何应用程序中的数
|
分布式计算 Java Hadoop
mapreduce实现流量汇总排序程序
mapreduce实现流量汇总排序程序
93 0
|
分布式计算 算法 Java
MapReduce入门编程-成绩求和排序
MapReduce入门编程-成绩求和排序
MapReduce入门编程-成绩求和排序
|
分布式计算
mapreduce辅助排序和序列化的实例练习
mapreduce辅助排序和序列化的实例练习
mapreduce辅助排序和序列化的实例练习
|
分布式计算 Java Hadoop
MapReduce基础编程之按日期统计及按日期排序(上)
MapReduce基础编程之按日期统计及按日期排序(上)
236 0
MapReduce基础编程之按日期统计及按日期排序(上)
|
分布式计算
MapReduce之输出结果排序
前面的案例中我们介绍了统计出每个用户的上行流量,下行流量及总流量,现在我们想要将输出的结果按照总流量倒序排序。
MapReduce之输出结果排序
|
分布式计算 测试技术 Apache
MapReduce编程(三) 排序
一、问题描述 文件中存储了商品id和商品价格的信息,文件中每行2列,第一列文本类型代表商品id,第二列为double类型代表商品价格。
917 0
|
1月前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
29 1