Как создать собственный записываемый трансформатор?

Я пишу собственный преобразователь spark.ml, расширяя Преобразователь.

Все в порядке, однако я не могу сохранить этот экземпляр этого трансформера, так как он не наследуется от трейта DefaultParamsWritable, как все трансформеры, и я не могу напрямую смешать трейт DefaultParamsWritable, так как он специфичен для пакета для org.apache.spark.ml.

Одним из обходных путей для этого является размещение вашего класса под org.apache.spark.ml. Это единственный способ добиться этого? Любые лучшие решения?


person Pravin Gadakh    schedule 31.03.2016    source источник
comment
Вы читали этот пост? Как создать собственный преобразователь   -  person Alberto Bonsanto    schedule 31.03.2016
comment
@AlbertoBonsanto Ссылаясь на этот комментарий, он также предлагает расширить DefaultParamsWritable. PS - То же, что и DefaultParamsWritable, вы не можете напрямую расширять MLWriter.   -  person Pravin Gadakh    schedule 01.04.2016


Ответы (1)


Наконец нашел способ сделать это!

Итак, трюк состоит из двух шагов.

Если вы планируете кодировать преобразователь, который имеет некоторые переменные, которые необходимо записать при сохранении, то это должен быть трейт, который расширяет класс org.apache.spark.ml.param.Params.

Общие черты, такие как HasInputCol, являются частными для пакета spark ml, поэтому вам необходимо повторно реализовать их также в общедоступном пакете util по вашему собственному выбору. (Есть ошибка, позволяющая сделать их общедоступными на их доске JIRA, но дата исправления еще не установлена.)

Но как только вы это сделаете, ваш преобразователь сможет просто реализовать обе эти черты типа Params, а также DefaultParamsWritable, и теперь ваш преобразователь будет сохраняться.

Очень хотелось бы, чтобы это было где-то задокументировано.

person Subramaniam Ramasubramanian    schedule 27.03.2017