这个问题对我来说有点不清楚.但我想我很清楚你想要什么.
首先,如果每次调用reduce时都没有做任何特殊操作,它只会获得一个带有一个或多个值的单个键(通过迭代器).
我的猜测是你要确保每个减速器都只有一个'键值对'.基本上有两种方法:
所以,如果我正确理解你的问题.您应该实现一个GroupComparator,它只是声明所有键都不同,因此应该发送到不同的reducer调用.
由于这个问题中的其他答案,我正在添加更多细节:
有3种方法用于比较键(我从使用0.18.3 API的项目中提取了这些代码示例):
分区
conf.setPartitionerClass(KeyPartitioner.class);
Run Code Online (Sandbox Code Playgroud)
分区程序只是为了确保"必须相同的东西最终在同一个分区上".如果你有一台计算机只有一个分区,所以这没有多大帮助.
关键比较器
conf.setOutputKeyComparatorClass(KeyComparator.class);
Run Code Online (Sandbox Code Playgroud)
关键比较器用于通过查看键来对组中的"键 - 值对"进行排序......键必须以某种方式不同.
集团比较
conf.setOutputValueGroupingComparator(GroupComparator.class);
Run Code Online (Sandbox Code Playgroud)
组比较器用于对不同的键进行分组,但必须在同一个reducer中发送.
HTH
| 归档时间: |
|
| 查看次数: |
5384 次 |
| 最近记录: |