在 MapReduce 中调用多个具有不同 InputFormatClass 的 Mapper
Posted
技术标签:
【中文标题】在 MapReduce 中调用多个具有不同 InputFormatClass 的 Mapper【英文标题】:Calling more than one Mapper with different InputFormatClass in MapReduce 【发布时间】:2018-03-12 09:50:55 【问题描述】:我想用三个Mapper
编写一个代码,其中两个将处理".csv"
文件,另一个是".xml"
。我已经为.xml
格式从here 写了XmlInputFormat
现在我想知道我应该输入什么
job.setInputFormatClass(...);
还有我应该添加哪个来提供文件路径。
TextInputFormat.addInputPath(...)
TextOutputFormat.setInputPath(...)
或
TextInputFormat.addInputPath(...)
TextOutputFormat.setInputPath(...)
【问题讨论】:
我已经添加了如何使用MultipleInputs
来实现这一点。请检查。
【参考方案1】:
您应该考虑编写两个映射器,一个处理.csv
文件,另一个处理.xml
。但是,两个映射器都应该产生key-value
和same type
,以便单个reducer 处理它。
下面是一个使用org.apache.hadoop.mapred.lib.MultipleInputs
的示例:
MultipleInputs.addInputPath(jobConf,
new Path(csvFilePath),
SequenceFileInputFormat.class,
CSVProcessingMapper.class);
MultipleInputs.addInputPath(jobConf,
new Path(xmlFilePath),
XmlInputFormat.class,
XMLProcessingMapper.class);
这里的CSVProcessingMapper.class
和XmlInputFormat.class
是CSV
和XML
处理映射器。您可以为不同的输入类型设置尽可能多的映射器。
同样SequenceFileInputFormat.class
和XmlInputFormat.class
类是对应的输入格式类。
【讨论】:
以上是关于在 MapReduce 中调用多个具有不同 InputFormatClass 的 Mapper的主要内容,如果未能解决你的问题,请参考以下文章