【问题标题】:Can reducer take multiple inputs from different mappers?reducer 可以从不同的映射器获取多个输入吗?
【发布时间】:2018-10-03 00:50:50
【问题描述】:

reducer 可以接受多个输入吗?两个映射器的键相同,但值类型不同。首先是一个 MapReduce 程序,它输出 (text, floatwritable),其中 floatwritable 是值类型,text 是键。第二个是输出(文本,SongStats)的映射器,其中 SongStats 是实现 Writable 的自定义数据类型。我想要一个 reducer 在运行计算时获取早期 map reduce 和第二个 mapper 的输出。我认为第一个 MapReduce 程序的输出可能太大而无法保存在分布式缓存中。任何指针都会有所帮助。我正在用 Java 编写程序。

【问题讨论】:

  • 请在提问时提供代码示例。

标签: java hadoop mapreduce


【解决方案1】:

不,reducer 只能接受方法定义中定义的特定输入:

public void reduce(Key key, Iterable<IntWritable> values,
                  Context context) throws IOException, InterruptedException {

最好的办法是编写一个新的 MapReduce 作业,该作业使用 MultipleInputs 将先前 MapReduce 作业的输出(具有文本、可浮动写)和其他 Mapper 的输出(具有文本、SongStats)转换为类似的类型(例如文本、文本或最适合您需要的任何内容)并将其传递给您的减速器。

来源:

https://hadoop.apache.org/docs/r2.9.0/api/org/apache/hadoop/mapreduce/Reducer.html

https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/input/MultipleInputs.html

【讨论】:

  • 这有帮助。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2018-06-12
  • 2010-12-15
相关资源
最近更新 更多