2016-06-10 59 views
0

我编写了下面的代码来过滤出与141不匹配的行,但我希望这141是动态的,并且希望在执行此映射时从命令行传递一个值减少计划。 我不知道如何将主函数的参数传递给分区类。将动态值传递给MapReduce中的分区代码

public class CharecterCountPartitioner extends Partitioner <Text, IntWritable> { 

    @Override 
    public int getPartition(Text key, IntWritable value, int numReduceTasks) { 

     //int line_length=Integer.parseInt(); 
     if(value.get() == 141) { 
     return 0; 
     } else { 
     return 1 % numReduceTasks; 
     } 
    } 
} 

回答

1

Partitioner可以实现interface Configurable,它给你回调时的配置是通过反射注入。

只需实现接口并在setConf(Configuration conf)上,您可以从命令行获取配置值,并将其用作类中的字段。

public class CharecterCountPartitioner extends Partitioner <Text, IntWritable> implements Configurable { 

    int lineLength;  

    @Override 
    public int getPartition(Text key, IntWritable value, int numReduceTasks) { // do stuff } 

    @Override 
    public void setConf(Configuration conf) { 
     lineLength = conf.getInt("whatever"); 
    } 

    @Override 
    public Configuration getConf() { 
     return null; 
    } 
} 
+0

你可以请示范如何实施它吗? – Peter

+0

@Peter是否适合你? –

+0

查看此[link](https://cornercases.wordpress.com/2011/05/06/an-example-configurable-partitioner/) –