我想编写一个可以处理文本和zip文件的MapReduce应用程序。为此,我想使用不同的输入格式,一个用于文本,另一个用于zip。是否可以这样做?
答案 0 :(得分:6)
从@ChrisWhite的回答中扩展一点,你需要的是使用适用于ZIP文件的自定义InputFormat
和RecordReader
。您可以在此处a sample ZipFileInputFormat和此处a sample ZipFileRecordReader找到。
鉴于此,正如Chris所建议的那样,你应该使用MultipleInputs
,如果你不需要每种类型文件的自定义映射器,我就会这样做:
MultipleInputs.addInputPath(job, new Path("/path/to/zip"), ZipFileInputFormat.class);
MultipleInputs.addInputPath(job, new Path("/path/to/txt"), TextInputFormat.class);
答案 1 :(得分:3)
查看MultipleInputs的API文档(old api,new api)。不是很自我解释,但你应该能够看到你在作业配置中调用addInputPath方法并配置输入路径(可以是glob,输入格式和相关的映射器)。
你应该能够向谷歌提供一些例子,事实上这里有一个显示一些用法的SO question / answer
答案 2 :(得分:0)
考虑编写一个自定义InputFormat
,您可以在其中检查正在读取的输入类型,然后根据检查调用所需的InputFormat