据我所知,在二级排序中,我们可以使用用户定义的类作为键。该类可以具有两个属性,例如,可以根据第一(自然键)属性对对进行分组,然后基于第二属性(辅助键)对其进行排序。我的问题是,关键对象的第二个属性(辅助键)具有不同的值。因此减速器无法接收单个密钥。也就是说,reducer应该接收一个键列表,因为每个键的第二个属性(二级键)具有不同的值。是对的吗?
这是关键类
public class KeyClass extends Configured implements WritableComparable<KeyClass >{
public boolean secondary;
public String primary;
...
}
答案 0 :(得分:1)
reduce获取单个键和值列表(可迭代)。您获得的密钥与列表中的一个值相关联。如果要访问辅助键(在值列表中正在更改的复合键值部分),则应将该辅助键放在值中。
答案 1 :(得分:0)
是的,你是对的。 你应该得到一个键列表,但你没有(不是列表意义上的。)
我最后一次使用二级排序(很久以前)我发现当我得到下一个值(即在迭代器上调用.next())时,框架也会改变键的实例。 / p>
这听起来很奇怪,这就是我记得它的原因。
请验证您正在使用的Hadoop版本中是否仍然如此。