Добавить новую подогнанную стадию в существующую PipelineModel без повторной подгонки

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

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

В Apache Spark 2.0 конструктор PipelineModel помечен как частный, поэтому его нельзя вызывать извне. В то время как в классе "Конвейер" только метод "подгонки" создает "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)

person user1269298    schedule 12.11.2018    source источник


Ответы (1)


Нет ничего * неправильного с использованием 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 не предоставляет такого.

** В Питоне:

from pyspark.ml import Transformer, PipelineModel

issubclass(PipelineModel, Transformer)
True 

В Скала

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

typeOf[PipelineModel] <:< typeOf[Transformer]
Boolean = true
person zero323    schedule 12.11.2018