我想捕获一些关于键及其内部值的信息一个自定义的Partitioner(或者甚至是默认的HashPartitioner)。
我可以通过访问"context"变量在映射器和reducer中使用自定义计数器。但是,在Partitioner内部,不能访问"context"变量。
有没有办法:-1-获得访问"上下文"变量从分区?或-2-如何在分区器中添加计数器?
谢谢。
通过分区器的每个键/值对要么(1)由映射器写入到上下文,要么(2)将传递给reducer的reduce()方法。您可以将代码放在这两个位置中的任何一个,以编写和增加上下文的自定义计数器。
如果必须在分区程序中编写代码,那么尝试让分区程序实现JobConfigurable。这将使hadoop在分区程序第一次实例化时使用JobConf对象调用分区程序。您可以在配置中放入信息(如要输出信息的顺序文件或文本文件的名称),并以这种方式将其传递给分区。
无法访问分区中的上下文(以及计数器)。
不确定为什么不能像Chris Gerken建议的那样在映射器中添加逻辑,但是一个类似/替代的方法是创建一个映射包装器类,在这里创建一个映射器。上下文包装类,然后用这个包装的上下文委托给你想要的Mapper类的实际map方法——然后你可以拦截上下文。编写方法调用并做您想做的事情—与仅仅更新映射器代码没有什么不同。