2016-03-31 16 views
5

Sto scrivendo un trasformatore spark.ml personalizzato estendendo Transformer.Come creare un trasformatore scrivibile personalizzato?

tutto bene, tuttavia non sono in grado di salvare l'istanza di questo trasformatore poiché non si estende da DefaultParamsWritable tratto come fa tutti i trasformatori, e non posso mixin direttamente DefaultParamsWritable tratto sia tal quale pacchetto specifico per org.apache.spark.ml.

Un modo per ovviare a questo è mettere la classe sotto org.apache.spark.ml. È questo l'unico modo per ottenere questo? Qualche soluzione migliore?

+1

Hai letto questo post? [Come creare un trasformatore personalizzato] (http://stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf) –

+0

@AlbertoBonsanto Riferendosi a questo [commento] (http : //stackoverflow.com/questions/35180527/how-to-create-a-custom-transformer-from-a-udf#comment58125884_35183614), suggerisce anche di estendere da DefaultParamsWritable. PS: come DefaultParamsWritable non è possibile estendere direttamente da MLWriter. –

risposta

0

Finalmente trovato un modo per farlo!

Quindi il trucco ha due passaggi.

Se si pianifica la codifica di un trasformatore con alcune variabili che devono essere scritte durante il salvataggio, deve essere un tratto che estende la classe org.apache.spark.ml.param.Params.

I tratti comuni come HasInputCol sono privati ​​del pacchetto spark ml, quindi è necessario reimplementarli anche in un pacchetto di utilità pubblica di propria scelta. (C'è un bug per renderli pubblici sulla loro scheda JIRA ma non ha ancora fissato la data.)

Ma una volta che hai questo, allora il tuo trasformatore può semplicemente implementare entrambi questi tratti di tipo Params e anche DefaultParamsWritable, e il tuo trasformatore è persistibile ora.

Davvero vorrei che questo fosse documentato da qualche parte.