0

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

目前我正在以这种方式使用它。它似乎工作正常。但是,我要更改的是用于确定文件名的字段的使用。

我不想将它们硬编码为field[0]or field[3](就像示例中的情况一样),我想(以某种动态方式)从JobConfas field[jobConf.get("id.offset")]or中提取它field[jobConf[get("date.offset")]。这里有谁知道我该怎么做(或达到这种效果的东西,即它本身不一定是JobConf)?

任何指针/建议/提示等。将不胜感激。谢谢。

4

2 回答 2

4

这取决于您的自定义参数是否因作业或键/值对而异。

如果您覆盖 getRecordWriter() 方法,您可以获得 JobConf 对象。这是调用 generateFileNameForKeyValue() 的方法(在 Hadoop 源代码中查看类 MultipleOutputFormat 中的实现)。您可以只调用 super ,然后使用传入 JobConf 对象的参数做任何您想做的事情。

如果您的参数因不同的键/值对而不同,您可以将参数作为键或值的一部分发送。然后在 MultipleTextOutputFormat 类中覆盖 getActualKey() 或 getActualValue() 以获取您想要的实际键或值对象。

希望这可以帮助。

于 2011-08-10T00:43:25.180 回答
0

您可以向conf对象添加设置。

Configuration conf = new Configuration();
conf.set("id.offset", 0);
conf.set("date.offset", 3);
...   
JobConf jobConf = new JobConf(conf, MyJob.class);

在您的 fileName 函数中,您可以根据需要使用它;field[jobConf.get("id.offset")]field[jobConf[get("date.offset")]

这里有一个小提示:我没有使用过 JobConf,所以我实际上不知道如何提取设置。我使用Job,并且该map函数具有contextcontext.getConfiguration()用来获取对象的Configuration对象,conf并将数据获取为int idOffset = conf.get("id.offset");

hth

于 2011-08-08T19:22:58.673 回答