Tout en travaillant sur la question de tri secondaire du guide définitif, je suis tombé sur un code comme ceci:Expliquer Hadoop Partitioner
@Override
public int getPartition(TextpairWritable tp, IntWritable value, int numPartitions) {
return Math.abs(Integer.parseInt(tp.getyear().toString()) * 127) % numPartitions;
}
Je veux comprendre quel est le sens de la ligne:
return Math.abs(Integer.parseInt(tp.getyear().toString()) * 127) % numPartitions;
Si je ne dis pas le nombre de réducteurs dans le code du pilote, comment hadoop connait-il la valeur de ce paramètre dans la ligne ci-dessus. quelle est la signification de le multiplier par 127?
Il y a un cas bizarre en Java lorsque Math.abs renvoie un nombre négatif, par exemple Math.abs (Integer.MIN_VALUE)% 3 <0 et la partition ne peut pas être négative. Il est beaucoup plus sûr d'abs après mod: return Math.abs (Integer.parseInt (tp.getyear(). ToString()) * 127% numPartitions); – alexeipab
Vous avez absolument raison. Je n'étais pas au courant du fait, 'Math.abs()', si l'argument est égal à la valeur de 'Integer.MIN_VALUE', la valeur int représentable la plus négative, le résultat est la même valeur, qui est négative. – YoungHobbit
Est-ce que les autres choses à propos de partitionner personnalisé sont maintenant claires pour vous grâce à la réponse? – YoungHobbit