2016-12-07 1 views
2

Ich habe ein kleines Projekt, wo ich eine Datei mit 2 Tab-getrennte Textspalten habe. Ich möchte, dass mein Mapper sie aus der Datei liest und die zweite Spalte als Schlüssel und die erste Spalte als Wert für den Reduzierer einstellt, aber ich kann es scheinbar nicht schaffen. Dann möchte ich die (Schlüssel, Wert) Paare zu Reduzierer übergeben, wo es für jeden Schlüssel eine Liste aller seiner Werte erstellen wird.Mapreduce Mapper um Schlüssel und Wert als Textfelder zu übergeben

public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { 

    private final static IntWritable one = new IntWritable(1); 
    private Text site = new Text(); 
    private Text tag = new Text(); 

    public void map(Object key, Text value, Context context) 
         throws IOException, InterruptedException { 

     StringTokenizer itr = new StringTokenizer(value.toString(), "\t"); 
     while (itr.hasMoreTokens()) { 
      site.set(itr.nextToken()); 
      tag.set(itr.nextToken()); 
      context.write(tag, site); 
     } 
    } 
} 

Ich erhalte eine Fehlermeldung auf der conext.write Linie. Wie kann ich das lösen?

Antwort

3

Der Wert (Site), den Sie in context.write(tag, site); schreiben, ist ein Text Objekt, aber Sie haben Mapper<Object, Text, Text, IntWritable>. Sie sollten dies in Mapper<Object, Text, Text, Text> ändern.

Im Moment sagen Sie, dass Sie eine als Wert ausgeben werden.

Sie können auch private final static IntWritable one = new IntWritable(1); entfernen, da es nicht verwendet wird.

Verwandte Themen