java - 将动态值传递给 MapReduce 中的分区程序代码

标签 java hadoop mapreduce

我写了下面的代码来过滤掉与 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/

相关文章:

java - 未能报告状态 600 秒。杀戮!报告 hadoop 的进展

hadoop - Hadoop 中的 AccessControlException for access=EXECUTE

hadoop - 在Windows 10上找不到或加载主类org.apache.hadoop.util.RunJar

apache-spark - 如何在减少之前避免大的中间结果?

hadoop - MapReduce 分析当天给定时间段内的产品销售情况

java - 如何在 Spring 应用程序上下文中添加新行作为 map 值

java - 使用 junit +spring 测试 DAO 文件

java - 如何在 Android 上用 Java 创建多图

java - 使用@OrderColumn 的JPA 多重获取返回多个空值

python - MapReduce Amazon Python 获取输入文件的行号