在从权威指南处理二级排序问题时,我遇到了这样的代码:
@Override
public int getPartition(TextpairWritable tp, IntWritable value, int numPartitions) {
return Math.abs(Integer.parseInt(tp.getyear().toString()) * 127) % numPartitions;
}
我想了解line的含义是什么:
return Math.abs(Integer.parseInt(tp.getyear().toString()) * 127) % numPartitions;
如果我没有告诉驱动程序代码中的reducer数量,hadoop如何知道上面一行中该参数的值。将它与127相乘的意义是什么?
答案 0 :(得分:0)
返回Math.abs(Integer.parseInt(tp.getyear()。toString())* 127)%numPartitions;
您可以根据key's year
属性值将其视为散列。您可以选择任意(素数)乘以您获得的值。此处所选值为127
。最后一部分numPartitions
定义了需要划分数据的桶数(减少器数)。
如果我没有告诉驱动程序代码中的reducer数量,hadoop如何知道上面一行中该参数的值。
参数的默认值为1
。因此,所有数据(映射器的输出)都会转到相同的reducer任务。
将它乘以127会有什么意义?
这是一个素数。我们通常乘以素数,以便您可以处理/忽略数据的显示。素数不能被任何其他数字整除,因此它们有助于在范围内均匀分布数据。