当项目基于键映射到reducer时,单个reducer是否接收到包含单个键的List,或者reducer包含哈希到该reducer的所有键?
示例:我有7个唯一的ID,我正在映射。
当我写reduce方法时,我能假设当我循环遍历列表中的所有元素时,我只有1个唯一的id吗?或者我可以在减速器中有不止一个id吗?
对reduce()
的每个调用都将有一个键和一个或多个值。这从Map.reduce()方法的签名中可以明显看出:reduce(KEYIN key, Iterable<VALUEIN> values, Context context)
一些例子:
- 如果映射程序用相同的键和10个不同的值调用
Context.write()
10次,reduce()方法将被调用一次,values
迭代器将提供10个不同值 - 如果映射程序使用10个不同的密钥调用
Context.write()
10次,则reduce()
将被调用10次,每次都使用不同的密钥
请记住,这是对默认情况的简化。您可以使用自定义分组比较器和其他技术来更改此行为。
此外,请记住,根据集群的设置,不同的减速器可能不在同一台机器上运行,也不在与映射器相同的机器上运行。