Domanda

Utilizzando solo un mapper (uno script Python) e nessun riduttore, come posso generare un file separato con la chiave come nome file, per ogni riga di output, piuttosto che avere lunghi file di output?

È stato utile?

Soluzione

Puoi scrivere su un file di testo sul filesystem locale usando le funzioni del file python o se vuoi usare HDFS usa il API di risparmio .

Altri suggerimenti

Le classi di input e outputformat possono essere sostituite usando i parametri della riga di comando -inputformat e -outputformat.

Un esempio di come eseguire questa operazione è disponibile nel progetto dumbo , che è un pitone framework per la scrittura di lavori in streaming. Ha una funzione per scrivere su più file e internamente sostituisce il formato di output con una classe del suo progetto gemello, feathers - fm.last.feathers.output.MultipleTextFiles.

Il riduttore deve quindi emettere una tupla come chiave, con il primo componente della tupla che è il percorso della directory in cui devono essere scritti i file con le coppie chiave / valore. Potrebbero esserci ancora più file, a seconda del numero di riduttori e dell'applicazione.

Consiglio di esaminare Dumbo, ha molte caratteristiche che rendono più semplice scrivere programmi Map / Reduce su Hadoop in Python.

È possibile sostituire outputFormatClass quando si utilizza lo streaming? In un'implementazione Java nativa, estendere la classe MultipleTextOutputFormat e modificare il metodo che nomina il file di output. Quindi definire l'implementazione come nuovo formato di output con il metodo setOutputFormat di JobConf

dovresti verificare, se questo è possibile anche in streaming. I donno: - /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top