Die Mapper-Klasse

Mapper bildet Eingabepaare <Schlüssel, Wert> auf eine Reihe von Zwischenpaaren <Schlüssel, Wert> ab. Die Zwischenpaare müssen nicht vom gleichen Typ sein wie die Eingangspaare. Ein gegebenes Eingangspaar kann auf null oder auf viele Ausgangspaare abgebildet werden.

<K1, V1>* → Mapper → <K2, V2>*

Map/Rece von Netezza führt für eine gegebene Eingabetabelle einen Map-Task pro Datenscheibe aus. Folglich wird die Anzahl der Map-Tasks durch die Anzahl der Datenscheiben bestimmt, über die die Eingabetabelle verteilt ist. Um die Leistung des Mappers zu optimieren, stellen Sie sicher, dass die Daten gleichmäßig auf die Dataslices verteilt sind.

Die Mapper-Implementierung besteht aus vier Methoden: setup(), map(), cleanup() und run(). Standardmäßig ruft die run()-Methode die setup()-Methode einmal auf, dann die map()-Methode für jedes Eingabepaar <Schlüssel, Wert> und schließlich die cleanup()-Methode. Beispiel:
public void run(Context context) throws IOException,
InterruptedException {
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}

Die Methode map() gibt standardmäßig ihre Eingabe als Ausgabe aus und fungiert als Identitätsfunktion, die überschrieben werden sollte. (Sie können jede dieser Methoden außer Kraft setzen, einschließlich run() für fortgeschrittene Anwendungsfälle)

Das Context-Objekt für Mapper

Der Mapper hat Zugriff auf das Kontextobjekt, das es ihm ermöglicht, mit der übrigen Umgebung zu interagieren. Das Context-Objekt, das als Argument an den Mapper und andere Methoden übergeben wird, ermöglicht den Zugriff auf die Konfigurationsdaten für den Auftrag und erlaubt es dem Mapper, mit der Methode Context.write(key, value) Ausgabepaare auszugeben.

Die Methode Context.getConfiguration() gibt ein Konfigurationsobjekt zurück, das Konfigurationsdaten für die Ausführung eines Map/Rece-Programms enthält. Sie können beliebige Paare von Konfigurationsdaten (Schlüssel, Wert) im Job festlegen (z. B. mit der Methode Job.getConfiguration().set("myKey", "myVal")) und diese Daten dann im Mapper mit der Methode Context.getConfiguration().get("myKey") abrufen. (Dies geschieht normalerweise mit der setup()-Methode des Mappers)

Die Methode cleanup() wird hauptsächlich überschrieben (standardmäßig erfolgt keine Bereinigung). Wenn Sie eine Bereinigung durchführen müssen, nachdem alle Eingaben verarbeitet wurden, können Sie den Standardwert überschreiben und ihn so einstellen, dass er Ihrem jeweiligen Anwendungsfall entspricht.