我使用的是自定义partitioner,它将记录随机分配给减少器。然后减速器开始处理。
在减速器开始工作之前,有没有办法知道每个减速器分配了多少记录??
Partitioner不会随机将记录分配给reducer,它有预定义的逻辑
当我们编写自定义分区程序时,我们编写了记录应该如何在减少程序之间分布的逻辑
例如,如果您正在处理由一个字段年龄组成的数据
您可以决定如何在还原中处理您的输入
首先,你必须为特定的作业配置数量的减速器,可以在地图还原作业的驱动程序中配置
假设您配置了3个减速器。
在编写自定义分区程序时,您将定义例如的逻辑
if(ageInt <=20){
return 0;
}
//else if the age is between 20 and 50, assign partition 1
if(ageInt >20 && ageInt <=50){
return 1 % numReduceTasks;
}
//otherwise assign partition 2
else
return 2 % numReduceTasks;
所有那些属于20岁以下的记录都将进入第一减速器。
甚至在执行作业之前,您就可以根据自己的情况统计所有记录的数量。