Ich habe mein erstes Projekt in Python 3.6 mit Spotifys Luigi programmiert, um einige Aufgaben zur Verarbeitung natürlicher Sprache in einer Pipeline zu arrangieren.
p> Ich habe bemerkt, dass die output()
Funktion einer Task
Klasse immer irgendeine Art von Target
-Objekt zurückgibt, welches irgendwo nur eine Datei ist, sei es lokal oder remote. Da meine Tasks komplexere Datenstrukturen wie Parse-Bäume erzeugen, ist es ziemlich schwierig für mich, sie in Dateien als Strings zu schreiben und sie danach wieder zu lesen.
Daher möchte ich fragen, ob es eine Möglichkeit gibt, Python-Objekte zwischen den Aufgaben innerhalb einer Pipeline zu übergeben?
Kurze Antwort: Nein.
Luigi-Parameter sind auf date / datetime-Objekte, string, int und float beschränkt. Siehe Dokumente als Referenz .
Das bedeutet, dass Sie Ihre komplexe Datenstruktur als String serialisieren müssen (mit json, msgpack, welchen Serializer Sie auch mögen und ihn sogar komprimieren) und ihn als String-Parameter übergeben.
Natürlich können Sie eine benutzerdefinierte Parameter-Unterklasse schreiben, aber Sie müssen das serialisieren und analysieren Methoden grundsätzlich.
Beachten Sie jedoch Folgendes: Wenn Sie Parameter verwenden, anstatt Ihre berechneten Daten auf einem Ziel zu speichern, verlieren Sie einen wichtigen Vorteil der Verwendung von Luigi: Wenn die übergeordnete Aufgabe im Baum mehr als die Anzahl der von Ihnen angegebenen Wiederholungen ausfällt, dann müssen Sie die Aufgabe ausführen, die diese komplexe Datenstruktur erneut berechnet. Wenn Ihre Aufgaben komplexe Daten berechnen oder viel Zeit in Anspruch nehmen oder eine Menge Ressourcen verbrauchen, sollten Sie die Ausgabe als Ziel speichern, um nicht alle diese teuren Berechnungen erneut durchführen zu müssen.
Und darüber hinaus: Eine andere Aufgabe könnte diese Daten auch brauchen, also warum nicht speichern?
Beachten Sie auch, dass Ziele nicht nur Dateien sind: Sie können Ihre Daten in einer Datenbanktabelle, Redis, Hadoop, einem Elastic Search-Index und vielem mehr speichern: Ссылка
Tags und Links python python-3.6 luigi