2016-06-10 61 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/) –