我想编写一个可以处理文本和 zip 文件的 MapReduce 应用程序。为此,我想使用不同的输入格式,一种用于文本,另一种用于 zip。有可能这样做吗?
问问题
1456 次
3 回答
6
从@ChrisWhite 的回答中扩展一点,您需要的是使用自定义InputFormat
并RecordReader
与 ZIP 文件一起使用。您可以在此处找到示例 ZipFileInputFormat并在此处找到示例 ZipFileRecordReader。
鉴于此,正如 Chris 建议的那样,您应该使用MultipleInputs
,如果您不需要为每种类型的文件自定义映射器,我会这样做:
MultipleInputs.addInputPath(job, new Path("/path/to/zip"), ZipFileInputFormat.class);
MultipleInputs.addInputPath(job, new Path("/path/to/txt"), TextInputFormat.class);
于 2013-01-15T17:01:11.730 回答
3
查看 MultipleInputs 的 API 文档(旧 api、新 api)。不是很容易解释,但您应该能够看到您在作业配置中调用 addInputPath 方法并配置输入路径(可以是 glob、输入格式和关联的映射器)。
您应该可以在 Google 上搜索一些示例,事实上这是一个SO question/answer,显示了一些用法
于 2013-01-15T12:15:00.870 回答
0
考虑编写一个自定义InputFormat
项,您可以在其中检查正在读取的输入类型,然后根据检查调用所需的InputFormat
于 2013-01-15T10:22:04.397 回答