La classe Mapper

Il mapper mappa le coppie <chiave, valore> in ingresso in un insieme di coppie <chiave, valore> intermedie. Non è necessario che le coppie intermedie siano dello stesso tipo di quelle in ingresso. Una data coppia di ingressi può corrispondere a zero o a molte coppie di uscite.

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

Il map/reduce di Netezza, per una data tabella di input, esegue un task map per ogni dataslice. Di conseguenza, il numero di task di mappatura è determinato dal numero di dataslices su cui è distribuita la tabella di input. Per ottimizzare le prestazioni del mapper, assicurarsi che i dati siano distribuiti in modo uniforme sui dataslices.

L'implementazione del mapper consiste in quattro metodi: setup(), map(), cleanup() e run(). Per impostazione predefinita, il metodo run() richiama una volta il metodo setup(), poi il metodo map() per ogni coppia di input <chiave, valore> e infine il metodo cleanup(). Ad esempio:
public void run(Context context) throws IOException,
InterruptedException {
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}

Il metodo map(), per impostazione predefinita, emette il suo input come output, agendo come una funzione di identità, e deve essere sovrascritto. (È possibile sovrascrivere uno qualsiasi di questi metodi, compreso run() per casi d'uso avanzati)

L'oggetto contesto per Mapper

Il mapper ha accesso all'oggetto contesto, che gli consente di interagire con il resto dell'ambiente. L'oggetto context, che viene passato come argomento al mapper e ad altri metodi, fornisce l'accesso ai dati di configurazione del lavoro e consente al mapper di emettere coppie di output usando il metodo Context.write(key, value).

Il metodo Context.getConfiguration() restituisce un oggetto di configurazione contenente i dati di configurazione per l'esecuzione del programma map/reduce. È possibile impostare coppie arbitrarie (chiave, valore) di dati di configurazione nel lavoro (ad esempio con il metodo Job.getConfiguration().set("myKey", "myVal")) e quindi recuperare questi dati nel mapper con il metodo Context.getConfiguration().get("myKey"). (Questo viene fatto in genere con il metodo setup() del mapper)

Il metodo cleanup() è principalmente sovrascrivibile (per impostazione predefinita non avviene alcuna pulizia). Se è necessario eseguire la pulizia dopo che tutti gli input sono stati elaborati, è possibile sovrascrivere il valore predefinito e impostarlo in base al caso d'uso specifico.