我写了下面的代码来过滤掉与 141 不匹配的行,但我希望这个 141 是动态的,并且想在执行这个 map reduce 程序时从命令行传递一个值。 我不确定如何将参数从主函数传递到分区程序类。
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;
}
}
}
最佳答案
Partitioner
可以实现 interface Configurable
,它会在通过反射注入(inject)配置时为您提供回调。
只需实现接口(interface),然后在 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;
}
}
关于java - 将动态值传递给 MapReduce 中的分区程序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752450/