Hadoop(和Java)新手。我需要使用MultipleTextOutputFormat来控制MapReduce中的输出文件名时需要一些帮助。

目前,我正在使用this way。而且似乎工作正常。但是,我要更改的是选择用来确定文件名的字段的用法。

与其将它们硬编码为field[0]field[3](如示例中的情况),我想(以某种动态方式)从JobConf称为field[jobConf.get("id.offset")]field[jobConf[get("date.offset")]。在座的人是否知道我该怎么做(或达到某种效果的方式,即本身不必是JobConf)?

任何指针/建议/技巧等。将不胜感激。谢谢。

最佳答案

这取决于您的自定义参数是基于作业还是基于键/值对而有所不同。

如果重写getRecordWriter()方法,则可以获取JobConf对象。这是调用generateFileNameForKeyValue()的方法(在Hadoop源代码中,检查类MultipleOutputFormat中的实现)。您可以只调用super,然后对在JobConf对象中传递的参数做任何想做的事情。

如果不同的键/值对的参数不同,则可以将参数作为键或值的一部分发送。然后在MultipleTextOutputFormat类中重写getActualKey()或getActualValue()以获取所需的实际键或值对象。

希望这可以帮助。

10-04 23:36