我能得到hadoop的分区号吗?

91zkwejq  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(408)

我是一个 hadoop 新手。
我想得到输出文件的分区号。
起初,我做了一个定制的分区器。

public static class MyPartitioner extends Partitioner<Text, LongWritable> {

    public int getPartition(Text key, LongWritable value, int numReduceTasks) {

    int numOfChars = key.toString().length();
        return numOfChars % numReduceTasks;
    }
}

它起作用了。但是,我想在reducer上“直观地”输出分区号。
我怎样才能得到零件号??
下面是我的资料来源。

public static class MyReducer extends Reducer<Text, LongWritable, Text, Text>{

    private Text textList = new Text();

    public void reduce(Text key, Iterable<LongWritable> values, Context context)
      throws IOException, InterruptedException {

        String list = new String();

            for(LongWritable value: values) {
                list = new String(list + "\t" + value.toString());
            }

            textList.set(list);

            context.write(key, textList);

    }

}

我想把分区号分别放在'列表'上。将有“0”或“1”。

list = new String(list + "\t" + value.toString() + "\t" + ??);

如果有人帮助我就太好了。
+
多亏了这个答案,我找到了解决办法。但是,它不起作用,我想我做错了什么。
下面是修改后的mypartitioner。
公共静态类mypartitioner扩展了partitioner{

public int getPartition(Text key, LongWritable value, int numReduceTasks) {

        int numOfChars = key.toString().length();
        return numOfChars % numReduceTasks;

        private int bring_num = 0;      
        public void configure(JobConf job) {
            bring_num = jobConf.getInt(numOfChars & numReduceTasks);
}

    }

}
wkftcu5l

wkftcu5l1#

将下面的代码添加到reducer类中,以获取类变量中的分区号,该分区号以后可以在reducer方法中使用。

String partition;
protected void setup(Context context) throws IOException,
    InterruptedException {
    Configuration conf = context.getConfiguration();
    partition = conf.get("mapred.task.partition");
}

相关问题