我想写一个mapreduce应用程序,可以处理文本和zip文件。为此,我想使用不同的输入格式,一个用于文本,另一个用于zip。有可能吗?
puruo6ea1#
查看api文档中的多个输入(旧api、新api)。这不是很简单,但是您应该能够看到在作业配置中调用addinputpath方法并配置输入路径(可以是glob、输入格式和关联的Map器)。你应该可以在谷歌上搜索一些例子,事实上这里有一个问题/答案,显示了一些用法
osh3o9ms2#
考虑写一个习惯 InputFormat 您可以检查正在读取的输入类型,然后根据检查调用所需的 InputFormat
InputFormat
u7up0aaq3#
从@chriswhite的答案中延伸出一点,您需要的是使用一个定制的 InputFormat 以及 RecordReader 可以处理zip文件。您可以在这里找到一个示例zipfileinputformat和一个示例zipfilerecordreader。考虑到这一点,克里斯建议你应该 MultipleInputs ,如果您不需要为每种类型的文件使用自定义Map器,我会这样做:
RecordReader
MultipleInputs
MultipleInputs.addInputPath(job, new Path("/path/to/zip"), ZipFileInputFormat.class); MultipleInputs.addInputPath(job, new Path("/path/to/txt"), TextInputFormat.class);
3条答案
按热度按时间puruo6ea1#
查看api文档中的多个输入(旧api、新api)。这不是很简单,但是您应该能够看到在作业配置中调用addinputpath方法并配置输入路径(可以是glob、输入格式和关联的Map器)。
你应该可以在谷歌上搜索一些例子,事实上这里有一个问题/答案,显示了一些用法
osh3o9ms2#
考虑写一个习惯
InputFormat
您可以检查正在读取的输入类型,然后根据检查调用所需的InputFormat
u7up0aaq3#
从@chriswhite的答案中延伸出一点,您需要的是使用一个定制的
InputFormat
以及RecordReader
可以处理zip文件。您可以在这里找到一个示例zipfileinputformat和一个示例zipfilerecordreader。考虑到这一点,克里斯建议你应该
MultipleInputs
,如果您不需要为每种类型的文件使用自定义Map器,我会这样做: