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:
| 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 | SÌ | SÌ | SÌ | ||||
| VIRGOLA MOBILE | SÌ | SÌ | SÌ | SÌ | |||
| DOPPIO | SÌ | SÌ | SÌ | ||||
| BYTEINT | SÌ | SÌ | SÌ | SÌ | SÌ | ||
| SMALLINT | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ | |
| INTEGER | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ | |
| BIGINT | SÌ | SÌ | SÌ | SÌ | SÌ | ||
| NUMERIC | SÌ | SÌ | |||||
| CAR | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ |
| CAR. VAR. | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ |
| NCHAR | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ |
| NVARCHAR | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ | SÌ |
| DATA | SÌ | SÌ | |||||
| ORA | SÌ | SÌ | |||||
| DATA/ORA | SÌ | SÌ | |||||
| timeTZ | SÌ | SÌ | |||||
| INTERVALLO | SÌ | SÌ |