2017-07-21 11 views
-1
public class PrimeMapper extends Mapper<LongWritable,IntWritable,IntWritable,NullWritable> 
    { 
     public void map(LongWritable k,IntWritable val,Context c) throws IOException, InterruptedException 
      { 
       int v=val.get(); 
       int i=2; 
       if(v==1) 
       c.write(new IntWritable(v), NullWritable.get()); 
       for(i=2;i<v;i++) 
        { 
         if(v%i==0) 
         break; 
        } 
       if(v==i) 
       c.write(new IntWritable(v),NullWritable.get()); 
      } 
    } 

にキャストすることはできません型キャストエラーのエラー。のjava.lang.Exception:java.lang.ClassCastExceptionが:私はなってこのコードを実行しようとしているときorg.apache.hadoop.io.Textはorg.apache.hadoop.io.IntWritable

enter image description here

+0

ポストスタックトレースを、例外をスローした行を指定します。 – talex

+0

スタックトレースを追加してください – Sergii

+0

int v = val.get();この行はエラーです –

答えて

0

もしTextInputFormatFileInputFormat<LongWritable, Text>を拡張)は、デフォルトの入力フォーマットを使用すると、マッパーはkeyvalueとしてTextとしてLongWritableを期待。プログラムでこれを明示的に変更していない場合は、マッパー定義が正しくありません。

正しい実装は次のようになります。

public class PrimeMapper extends Mapper<LongWritable,Text,IntWritable,NullWritable>{ 
    public void map(LongWritable k,Text val,Context c) throws IOException, InterruptedException{ 
    int v=Integer.parseInt(val.toString().trim()); 
    int i=2; 
    if(v==1) 
    c.write(new IntWritable(v), NullWritable.get()); 
    for(i=2;i<v;i++) 
     { 
      if(v%i==0) 
      break; 
     } 
    if(v==i) 
    c.write(new IntWritable(v),NullWritable.get()); 
    } 
} 
関連する問題