Добавить новую установленную ступень в выходную PipelineModel без повторной установки - PullRequest
0 голосов
/ 12 ноября 2018

Я хотел бы объединить несколько обученных конвейеров в один, что аналогично « Spark добавляет новую адаптированную стадию к выходной модели PipelineMode без повторной подгонки », однако решение, приведенное ниже, предназначено для PySpark.

> pipe_model_new = PipelineModel(stages = [pipe_model , pipe_model2])
> final_df = pipe_model_new.transform(df1)

В Apache Spark 2.0 конструктор PipelineModel помечен как закрытый, поэтому его нельзя вызывать извне.В то время как в классе "Pipeline", только метод "fit" создает "PipelineModel"

val pipelineModel =  new PipelineModel("randomUID", trainedStages)
val df_final_full = pipelineModel.transform(df)
Error:(266, 26) constructor PipelineModel in class PipelineModel cannot be accessed in class Preprocessor
    val pipelineModel =  new PipelineModel("randomUID", trainedStages)

1 Ответ

0 голосов
/ 12 ноября 2018

Нет ничего неправильного с использованием Pipeline и вызовом fit метода.Если уровень - Transfomer, а PipelineModel - **, fit работает как личность.

Вы можете проверить соответствующий Python :

if isinstance(stage, Transformer):
    transformers.append(stage)
    dataset = stage.transform(dataset)

и Scala-код :

Это означает, что процесс подгонки будет только проверять схему и создавать новый объект PipelineModel.

case t: Transformer =>
  t

*единственное возможное беспокойство вызывает наличие не ленивых Transformers, хотя, за исключением устаревших OneHotEncoder, Spark core API не предоставляет таких.

** В Python:

from pyspark.ml import Transformer, PipelineModel

issubclass(PipelineModel, Transformer)
True 

In Scala

import scala.reflect.runtime.universe.typeOf
import org.apache.spark.ml._

typeOf[PipelineModel] <:< typeOf[Transformer]
Boolean = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...