在hadoop mapreduce中单独输出文件

时间:2013-06-25 09:37:47

标签: hadoop mapreduce

我的问题可能已被提出,但我无法找到问题的明确答案。

我的MapReduce是一个基本的WordCount。我当前的输出文件是:

// filename : 'part-r-00000'
789  a
755  #c   
456  d
123  #b

如何更改输出文件名?

然后,是否可以有2个输出文件:

// First output file
789  a
456  d

// Second output file
123  #b
755  #c

这是我的减少类:

public static class SortReducer extends Reducer<IntWritable, Text, IntWritable, Text> {

    public void reduce(IntWritable key, Text value, Context context) throws IOException, InterruptedException {

        context.write(key, value);

    }
}

这是我的分区成员类:

public class TweetPartitionner extends Partitioner<Text, IntWritable>{

    @Override
    public int getPartition(Text a_key, IntWritable a_value, int a_nbPartitions) {
        if(a_key.toString().startsWith("#"))
            return 1;
        return 0;
    }


}

非常感谢!

2 个答案:

答案 0 :(得分:1)

关于如何更改输出文件名的其他问题,您可以查看http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html#write(java.lang.String,K,V)。

答案 1 :(得分:0)

在您的工作档案集

job.setNumReduceTasks(2);

来自mapper emit

a    789
#c   755     
d    456  
#b   123 

编写分区程序,将分区程序添加到作业配置中,在分区程序中检查密钥是否以#start 1开头,否则为0

在reducer交换密钥和值