Frage

nur einen Mapper (ein Python-Skript) und keine Reduzierung, wie kann ich Ausgang eine separate Datei mit dem Schlüssel als Dateinamen für jede Zeile der Ausgabe, anstatt lange Dateien ausgegeben?

War es hilfreich?

Lösung

Sie können entweder in eine Textdatei auf dem lokalen Dateisystem mit Python-Datei Funktionen schreiben oder wenn Sie wollen HDFS verwenden verwenden, um die Thrift API .

Andere Tipps

Die Eingangs- und output Klassen können durch die Verwendung der -inputformat und -outputformat Kommandozeilenparameter ersetzt werden.

Ein Beispiel dafür, wie dies zu tun in dem dumbo Projekt gefunden werden, die eine Python ist Rahmen für das Streaming von Arbeitsplätzen zu schreiben. Es verfügt über eine Funktion für mehrere Dateien zu schreiben, und intern ersetzt es das Ausgabeformat mit einer Klasse von seinem Schwesterprojekt, Federn -. fm.last.feathers.output.MultipleTextFiles

Der Druckminderer muss dann ein Tupel als Schlüssel emittieren, wobei die erste Komponente des Tupels der Pfad zu dem Verzeichnis zu sein, wo die Dateien mit den Schlüssel / Wert-Paare geschrieben werden soll. Es könnte noch mehrere Dateien sein, die auf der Anzahl von Reduzierungen und der Anwendung ab.

ich empfehlen, sich in Dumbo, es hat viele Funktionen, die es einfacher schreiben Map / Reduce-Programme auf Hadoop in Python macht.

Ist es möglich, die outputFormatClass, bei der Verwendung von Streaming zu ersetzen? In einer nativen Java-Implementierung würden Sie die MultipleTextOutputFormat Klasse erweitern und die Methode, die Namen der Ausgabedatei ändern. Dann definieren Sie Ihre Implementierung als neuer output mit JobConf des setOutputFormat Methode

sollten Sie überprüfen, ob dies in Streaming auch möglich ist. Ich donno: - /

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top