2012-03-15 11 views
6

Sono abbastanza confuso sull'uso di Avro con la mappa ridotta e non riesco a trovare le esercitazioni migliori da seguire.Un lavoro di ridimensionamento della mappa con input di testo normale e output avro

Sembra che le classi come AvroJob e AvroMapper siano orientate a problemi quando sia l'input che l'output sono file di dati Avro. Che dire quando il tuo input è solo testo?

In particolare:

mio mapper prende le chiavi LongWritable ei valori di testo come input. Emette i tasti di testo e i valori di MyAvroRecord.

Il mio riduttore accetta i tasti di testo e un Iterator di MyAvroRecords come input ed emette i valori dei tasti di testo e MyAvroRecord.

Come si ottiene un OutputFormat che dovrebbe scrivere i valori di questi tasti di testo e MyAvroRecord su file?

Acclamazioni, Dave

risposta

6

Ok, così ho capito questo.

Piuttosto che un mappatore che emette valori di tasti di testo e valori MyAvroRecord, ne avevo bisogno uno che producesse i tasti AvroKey e AvroValue. Era in grado di alimentare i suoi risultati direttamente su un AvroReducer, e potevo semplicemente usare AvroJob.setOutputSchema() per gestire l'output (non avevo affatto bisogno di implementare un OutputFormat).

+0

Ciao Dave, io sto cercando di fare qc nella direzione opposta. Il mio input è testo e l'output è Record generico. Cerco di configurare uno schema di input Avro per AvroJob e quindi di impostare lo schema di output come schema del record generico. Ma non so come riassumere lo schema di input in modo che AvroJob possa capire che è un testo normale. Dovrei semplicemente usare setInputSchema() come niente? –

0

Un altro modo per avvicinarsi può essere: l'output del mapper non deve essere AvroKey e AvroValue. Possono essere i tuoi tipi di output generali, che diventano input per il tuo riduttore. In reducer possiamo fare la conversione di Avro. Impostando il tipo Outputformat su Avro.

saluti, Sujoy

Problemi correlati