Java 在自定义密钥的情况下,如何设置自定义分区器的numReduceTask HashPartitioner hash=newhashpartitioner(); @凌驾 public int getPartition(CompositeKeyClass keyClass、Text valClass、int numOfPartition){ //TODO自动生成的方法存根 试试{ 字符串[]类型=valClass.toString().split(“,”); if(类型[0].equals(“Mapper1”)){ 返回(hash.getPartition(keyClass.getFirst(),valClass,numOfPartition))%numOfPartition; }否则{ 返回(hash.getPartition(keyClass.getFirst(),valClass,numOfPartition))%numOfPartition; } } }

Java 在自定义密钥的情况下,如何设置自定义分区器的numReduceTask HashPartitioner hash=newhashpartitioner(); @凌驾 public int getPartition(CompositeKeyClass keyClass、Text valClass、int numOfPartition){ //TODO自动生成的方法存根 试试{ 字符串[]类型=valClass.toString().split(“,”); if(类型[0].equals(“Mapper1”)){ 返回(hash.getPartition(keyClass.getFirst(),valClass,numOfPartition))%numOfPartition; }否则{ 返回(hash.getPartition(keyClass.getFirst(),valClass,numOfPartition))%numOfPartition; } } },java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我在Partitioner类中使用上述代码来获取自定义类的密钥。所有工作正常,但我希望将文本“Mapper1”的值发送到第一个reducer,另一个发送到第二个reducer。我怎样才能做到这一点?我已将job.numfReduceTaks设置为2。请帮忙 这是一个静态的决定,对吗? 试试这个: HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>(); @Override public int g

我在Partitioner类中使用上述代码来获取自定义类的密钥。所有工作正常,但我希望将文本“Mapper1”的值发送到第一个reducer,另一个发送到第二个reducer。我怎样才能做到这一点?我已将
job.numfReduceTaks
设置为2。请帮忙

这是一个静态的决定,对吗? 试试这个:

HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>();

@Override
public int getPartition(CompositeKeyClass keyClass, Text valClass, int numOfPartition) {
    // TODO Auto-generated method stub
    try {       
        String[] type=valClass.toString().split(",");

        if(type[0].equals("Mapper1")) {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
        } else {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;   
        }
    }
}

是的,在驱动程序中,您需要将
job.numfReduceTaks
设置为2。你做得对。

这是一个静态的决定,对吗? 试试这个:

HashPartitioner<Text,Text> hash=new HashPartitioner<Text,Text>();

@Override
public int getPartition(CompositeKeyClass keyClass, Text valClass, int numOfPartition) {
    // TODO Auto-generated method stub
    try {       
        String[] type=valClass.toString().split(",");

        if(type[0].equals("Mapper1")) {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;
        } else {
            return (hash.getPartition(keyClass.getFirst(), valClass, numOfPartition))%numOfPartition;   
        }
    }
}

是的,在驱动程序中,您需要将
job.numfReduceTaks
设置为2。你做得对。

那么我如何返回getPartition方法呢?它需要与key类一起返回,以便将正确的key发送给amardepsingh。好吧,我可能没有得到你想要说的。getPartition()方法只需返回一个int(即0),基本上我正在为自定义键类使用一个自定义分区器。如果只有一个缩减器,下面的代码可以工作。如何设置为,以便在需要两个缩减器时它可以处理这种情况?内联“公共静态类分区扩展了分区器”{private HashPartitioner hash=new HashPartitioner();@Override public int-getPartition(CompositeKey,Text-val,int-num){return hash.getPartition(key.getFirst(),val,num)%num;}“那么,我如何返回getPartition方法呢?它需要与key类一起返回,以便将正确的密钥发送给reducer。@Amardepsingh嗯,我可能没有得到您想要说的内容。getPartition()方法只需要返回一个int(即0基本上我正在为自定义密钥类使用自定义分区器。如果只有一个缩减器,则以下代码可以工作。如何设置为,以便在需要两个缩减器时它可以处理这种情况?内联“public static class partition extensed Partitioner{private HashPartitioner hash=new HashPartitioner();@Override public int-getPartition(CompositeKey,Text-val,int-num){return hash.getPartition(key.getFirst(),val,num)%num;}