Ich benutze einige Transformatoren von Pyspark wie StringIndexer, StandardScaler und mehr. Ich wende diese zuerst an den Trainingssatz an und später möchte ich dieselben Transformationsobjekte (dieselben Parameter von StringIndexerModel, StandardScalerModel) verwenden, um sie auf den Testsatz anzuwenden. Daher suche ich nach einer Möglichkeit, diese Transformationsfunktionen als Datei zu speichern. Ich kann jedoch keine verwandte Methode finden, sondern nur mit ml-Funktionen wie LogisticRegression. Kennen Sie einen möglichen Weg? Vielen Dank.Pyspark: Speichern Transformatoren
Antwort
Die Ausgabe von StringIndexer und StandardScaler sind beide RDDs, so dass Sie die Modelle entweder direkt in einer Datei speichern können oder, was wahrscheinlicher ist, können Sie die Ergebnisse für spätere Berechnungen beibehalten.
Um zu einem Parkett Datei Aufruf zu speichern (möglicherweise benötigen Sie auch ein Schema) sqlContext.createDataFrame(string_indexed_rdd).write.parquet("indexer.parquet")
. Sie müssten dann das Laden dieses Ergebnisses aus einer Datei programmieren, wenn Sie es wollten.
Um fortzufahren Anruf string_indexed_rdd.persist()
. Dies speichert die Zwischenergebnisse im Speicher zur späteren Wiederverwendung. Sie können Optionen übergeben, um auch auf die Festplatte zu speichern, wenn Sie speicherbegrenzt sind.
Wenn Sie möchten, bestehen bleiben nur das Modell selbst, sind Sie auf einer vorhandenen Fehler/fehlende Fähigkeit im api stecken (PR). Wenn das zugrunde liegende Problem gelöst wurde und keine neuen Methoden bereitgestellt wurden, müssen Sie einige zugrunde liegende Methoden manuell aufrufen, um die Modellparameter abzurufen und festzulegen. Beim Durchsehen des Modellcodes können Sie sehen, dass die Modelle von einer Kette von Klassen erben, von denen eine Params
ist. Diese Klasse hat die , die die im Modell verwendeten Parameter herauszieht. Sie können dies auf beliebige Weise speichern, die Sie für persistente Python-Dicts wünschen. Dann müssen Sie ein leeres Modellobjekt erstellen und mit einem Aufruf an copy(saved_params)
folgen, um die persistenten Parameter in das Objekt zu übergeben.
Etwas in dieser Richtung sollte funktionieren:
def save_params(model, filename):
d = shelve.open(filename)
try:
return d.update(model.extractParamMap())
finally:
d.close()
def load_params(ModelClass, filename):
d = shelve.open(filename)
try:
return ModelClass().copy(dict(d))
finally:
d.close()
Ich bin nicht daran interessiert, die transformierten Daten zu speichern, sondern das Modell selbst. Zum Beispiel möchte ich das StandardScalerModel speichern, das keine RDD ist. –
Ahh deine Frage war zu diesem Punkt nicht klar - ich habe den Quellcode gescannt und hinzugefügt, was ich denke, was du erreichen willst. – Pyrce
Ich werde es versuchen, danke! –
Ich fand eine einfache Lösung.
Speichern Sie das Indexermodell in einer Datei (auf HDFS).
writer = indexerModel._call_java("write")
writer.save("indexerModel")
Laden Sie das Indexermodell aus einer Datei (gespeichert auf HDFS).
indexer = StringIndexerModel._new_java_obj("org.apache.spark.ml.feature.StringIndexerModel.load", "indexerModel")
indexerModel = StringIndexerModel(indexer)
- 1. pySpark: Speichern ML Modell
- 2. Pyspark: Bilder auf HDFS speichern
- 3. PHP Fraktale Transformatoren - Mehrere Transformatoren für ein einzelnes Modell?
- 4. Monad Transformatoren und Hubfunktion
- 5. Transformation unter Transformatoren
- 6. Monade-Transformatoren. Erster Schritt
- 7. Monad Transformatoren Monad Duplizierung
- 8. PySpark DataFrame in aktuelle JSON-Datei speichern
- 9. Stacking Monade Transformatoren in scala
- 10. Monad-Transformatoren mit Scalaz-Streams
- 11. Vielleicht innen Stapel von Transformatoren
- 12. Unterstützung mehrerer Transformatoren RequestBody im Frühjahr
- 13. "Monad Transformatoren leistungsfähiger als Effekte" - Beispiele?
- 14. Warum unterscheiden sich Monad-Transformatoren von Monaden?
- 15. Wie kann ich Teilergebnisse der Datenrahmentransformation in pyspark speichern?
- 16. Importieren Pyspark Fehler Pyspark mit Python 3.5.1
- 17. PySpark PicklingError
- 18. pyspark mit
- 19. PySpark Druck
- 20. PySpark Auswertung
- 21. RDD in iterable konvertieren: PySpark?
- 22. pyspark saveAsSequenceFile mit pyspark.ml.linalg.Vectors
- 23. Kann ich Monad-Transformatoren verwenden, um diese Zusammensetzung zu vereinfachen?
- 24. Pyspark: shuffle RDD
- 25. Run PySpark als Skript
- 26. Zufallszahlen Generation in PySpark
- 27. PySpark Serialisierung EOFError
- 28. Trans RDD in PySpark
- 29. PySpark DataFrame reduce_by
- 30. pyspark matrix accumulator
Können Sie klären, ob Sie mit MLlib oder ML arbeiten? – zero323
Hoppla, tut mir leid. Ich arbeite mit pyspark.ml. –