2017-07-21 7 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()); 
      } 
    } 

quand je suis en train d'exécuter ce code i obtenir erreur d'erreur de typage.java.lang.Exception: java.lang.ClassCastException: org.apache.hadoop.io.Text ne peut pas être jeté à org.apache.hadoop.io.IntWritable

enter image description here

+0

post trace de la pile et spécifier quelle ligne émet une exception. – talex

+0

ajouter une trace de pile s'il vous plaît – Sergii

+0

int v = val.get(); cette ligne est l'erreur –

Répondre

0

Lorsque vous utilisez le format d'entrée par défaut qui est TextInputFormat (étend FileInputFormat<LongWritable, Text>), le cartographe attend LongWritable que key et Text comme value. Si vous n'avez pas modifié cela explicitement dans votre programme, votre définition de mappeur est incorrecte.

Une mise en œuvre correcte ressemblerait à quelque chose comme ceci:

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()); 
    } 
}