2016-06-26 8 views
0

Ich habe ein MapReduce-Programm, das Dateien rekursiv aus einem Ordner und seinen Unterordnern liest. Ich habe eine benutzerdefinierte Dateieingabeformatklasse geschrieben, um isSplitable false zu machen, um sicherzustellen, dass eine vollständige Datei an nur einen Mapper geht und die Datei zeilenweise gelesen wird. Jetzt suche ich nach einem Muster und wenn eine Übereinstimmung gefunden wird, möchte ich nicht fortfahren und möchte die Ausführung der aktuellen Datei überspringen. Wie können wir das in einer Mapper-Klasse erreichen?Wie kann ich gerade die Datei von Mapper in MapReduce überspringen?

Antwort

0

Sie können die run-Methode einfach erneut implementieren. Zum Beispiel mit einem booleschen Feld, um direkt in die Bereinigungsphase zu schließen.

public class SkipMapper extends Mapper<LongWritable, Text, Text, Text> { 

    private boolean skip; 

    @Override 
    protected void map(LongWritable key, Text value, 
     Mapper<LongWritable, Text, Text, Text>.Context context) 
     throws IOException, InterruptedException { 

    // map with the matcher 
    if (match) { 
     skip = true; 
    } 

    } 

    @Override 
    public void run(Mapper<LongWritable, Text, Text, Text>.Context context) 
     throws IOException, InterruptedException { 
    setup(context); 
    try { 
     while (!skip && context.nextKeyValue()) { 
     map(context.getCurrentKey(), context.getCurrentValue(), context); 
     } 
    } finally { 
     cleanup(context); 
    } 
    } 

} 
+0

Vielen Dank Thomas, das ist wirklich hilfreich ... –

Verwandte Themen