mapreduceソートでjava.io.IOException: Illegal partition for 2 (-1)
1301 ワード
mapreduceプログラム、Partitionをカスタマイズし、実行時に以下の異常が発生しました.
java.io.IOException: Illegal partition for 2 (-1)
カスタムPartitionコード:
理由:
エラーの原因は、ある場合getPartition関数が-1を返し、Partitionは0から始まります.
、デフォルトの戻り値-1は正しくありません.
解決方法:
デフォルトは0を返します
java.io.IOException: Illegal partition for 2 (-1)
カスタムPartitionコード:
public static class Partition extends Partitioner<IntWritable,IntWritable>
{
@Override
public int getPartition(IntWritable key, IntWritable value, int numPartitions)
{
int Maxnumber = 65223;
int bound = Maxnumber/numPartitions+1;
int keynumber = key.get();
for (int i = 0; i < numPartitions; i++) {
if(keynumber<bound*i&&keynumber>=bound*(i-1))
{
return i-1;
}
}
return -1;
}
}
理由:
エラーの原因は、ある場合getPartition関数が-1を返し、Partitionは0から始まります.
、デフォルトの戻り値-1は正しくありません.
解決方法:
デフォルトは0を返します
public static class Partition extends Partitioner<IntWritable,IntWritable>
{
@Override
public int getPartition(IntWritable key, IntWritable value, int numPartitions)
{
int Maxnumber = 65223;
int bound = Maxnumber/numPartitions+1;
int keynumber = key.get();
for (int i = 0; i < numPartitions; i++) {
if(keynumber<bound*i&&keynumber>=bound*(i-1))
{
return i-1;
}
}
return 0;
}
}