2016-03-31 22 views
5

Ich schreibe einen benutzerdefinierten spark.ml Transformator durch Erweitern Transformer.Wie erstelle ich einen benutzerdefinierten beschreibbaren Transformator?

Alles ist in Ordnung, aber ich nicht in der Lage bin diese Instanz dieses Transformators zu sparen, da sie nicht von DefaultParamsWritable Merkmale erstreckt sich wie alle Transformatoren tun, und ich kann DefaultParamsWritable Zug nicht direkt mixin entweder als es Paket spezifisch für org.apache.spark.ml ist.

Eine Problemumgehung ist, Ihre Klasse unter org.apache.spark.ml zu setzen. Ist das der einzige Weg dies zu erreichen? Irgendwelche besseren Lösungen?

+1

Haben Sie diesen Beitrag gelesen? [So erstellen Sie einen benutzerdefinierten Transformator] (http://stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf) –

+0

@AlbertoBonsanto Unter Bezugnahme auf diese [Kommentar] (http : //stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf#comment58125884_35183614), schlägt auch vor, von DefaultParamsWritable zu erweitern. PS - Wie DefaultParamsWritable können Sie den MLWriter nicht direkt erweitern. –

Antwort

0

Endlich einen Weg gefunden, dies zu tun!

Also der Trick hat zwei Schritte.

Wenn Sie einen Transformer programmieren möchten, der einige Variablen enthält, die beim Speichern geschrieben werden müssen, muss dies eine Eigenschaft sein, die die org.apache.spark.ml.param.Params-Klasse erweitert.

Die gemeinsamen Merkmale wie HasInputCol sind privat für das Spark-Paket, so dass Sie diese auch in einem öffentlichen Util-Paket Ihrer eigenen Wahl neu implementieren müssen. (Es gibt einen Fehler, um diese auf ihrem JIRA-Board öffentlich zu machen, aber es hat noch kein Fixdatum.)

Aber sobald Sie dies haben, kann Ihr Transformator einfach diese beiden Eigenschaften vom Typ Params und auch die DefaultParamsWritable implementieren, und Ihr Transformator ist jetzt dauerhaft.

Wirklich wünschen, dass dies irgendwo dokumentiert wurde.

Verwandte Themen