2009-04-22 4 views
0

Ich lerne Apache Hadoop und ich schaute auf das WordCount-Beispiel org.apache.hadoop.examples.WordCount. Ich habe dieses Beispiel verstehen, aber ich kann sehen, dass die Variable LongWritable Schlüssel nicht Was nutzt der 'Schlüssel K1' im org.apache.hadoop.mapred.Mapper?

(...) 
public void map(LongWritable key, Text value, 
        OutputCollector<Text, IntWritable> output, 
        Reporter reporter) throws IOException { 
     String line = value.toString(); 
     StringTokenizer itr = new StringTokenizer(line); 
     while (itr.hasMoreTokens()) { 
     word.set(itr.nextToken()); 
     output.collect(word, one); 
     } 
    } 
(...) 

was in

verwendet wurde, ist die Verwendung dieser Variablen? Könnte mir jemand ein einfaches Beispiel geben, wo es verwendet würde? Danke

Antwort

1

Wenn das InputFormat TextInputFormat ist, ist der Schlüssel der Byte-Offset vom Anfang der aktuellen Eingabedatei.

Wert ist einfach die Textzeile bei diesem Offset.

Wenn SequenceFileInputFormat verwendet wurde, wäre der Schlüssel, was auch immer in die Schlüsselposition des 'Datensatzes gestopft wurde. Dasselbe gilt für Value.

Fazit ist, dass sie Schlüssel/Wert-Typen sind abhängig von der Art der Eingabe (Text, Sequenz-Datei, etc).

ckw

1

Ich könnte falsch liegen (Ich habe Map/reduce Tutorials gelesen, habe es aber noch nicht für echte Projekte verwendet), aber ich denke, im Allgemeinen ist es die Kennung des Eingabeeintrags; zum Beispiel Tupel (Dateiname, Zeilennummer). In diesem speziellen Fall ist es angeblich Zeilennummer, und es ist für Wortzählungen nicht von Interesse. Es könnte verwendet werden, wenn die Idee darin besteht, Wortanzahlungen pro Zeile und nicht pro Datei zu aggregieren (oder für mehrere Dateien, wenn der Schlüssel diese Information enthält).