Scrivibile

Tutte le classi di chiavi e valori utilizzate nelle firme map e reduce devono implementare l'interfaccia Writable. Ciò consente al framework di serializzare/deserializzare le coppie <chiave,valore> da e verso i record del database.

L'API map/reduce fornisce l'implementazione dei seguenti writer di base: BooleanWritable, IntWritable, LongWritable, FloatWritable, DoubleWritable, Text, Ntext e NullWritable.

Un'interfaccia scrivibile consente di specificare tipi di chiave/valore multicolonna. Il metodo getStorageTypesList() restituisce un elenco di classi che possono essere mappate dal framework ai tipi di colonne del database. La tabella seguente mostra la mappatura:
Tabella 1. Mappature di classe Java
classe Java Tipo di dati
java.lang.Boolean BOOL
java.lang.Byte BYTEINT
java.lang.Short SMALLINT
java.lang.Integer INTEGER
java.lang.Long BIGINT
java.lang.Float VIRGOLA MOBILE
java.lang.Double DOPPIO
java.lang.String CAR. VAR.
org.netezza.inza.mr.io.type.NString NVARCHAR
Il seguente esempio di Writable personalizzato è composto da tre campi: int, float e boolean. Il metodo getStorageTypesList() utilizzato nell'esempio restituisce un elenco di classi java corrispondenti: Integer.class, Float.class, Boolean.class. Il metodo consente di creare lettori e scrittori adeguati.
public class CustomWritable implements Writable {
private int a;
private float b;
private boolean c;
@Override
public void write(RecordOutput out) throws IOException {
out.writeInt(a);
out.writeFloat(b);
out.writeBoolean(c);
}
@Override
public void readFields(RecordInput in) throws IOException {
a = in.readInt();
b = in.readFloat();
c = in.readBoolean();
}
@Override
public List<Class<?>> getStorageTypesList() {
List<Class<?>> ret = new ArrayList<Class<?>>();
ret.add(Integer.class);
ret.add(Float.class);
ret.add(Boolean.class);
return ret;
}
}
I tipi di database di output sono strettamente determinati dai tipi di memoria di Writable definiti nel metodo getStorageTypesList(). Tuttavia, il framework supporta le seguenti conversioni automatiche durante la lettura dei dati dai record del database ai tipi Writable.
  Booleano Numero intero Lungo Mobile Doppia Testo Ntext
BOOL        
VIRGOLA MOBILE      
DOPPIO        
BYTEINT    
SMALLINT  
INTEGER  
BIGINT    
NUMERIC          
CAR
CAR. VAR.
NCHAR
NVARCHAR
DATA          
ORA          
DATA/ORA          
timeTZ          
INTERVALLO