将新的拟合阶段添加到现有的 PipelineModel 中而无需再次拟合
Add new fitted stage to a exitsting PipelineModel without fitting again
我想将几个经过训练的管道连接成一个,这类似于
"" 但是下面的解决方案适用于 PySpark。
> pipe_model_new = PipelineModel(stages = [pipe_model , pipe_model2])
> final_df = pipe_model_new.transform(df1)
在 Apache Spark 2.0 中 "PipelineModel" 的构造函数被标记为私有的,因此它不能被外部调用。而在 "Pipeline" class 中,只有 "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)
和调用 fit
方法没有任何*错误。如果阶段是 Transfomer
,而 PipelineModel
是**,则 fit
就像身份一样。
你可以查看relevant Python:
if isinstance(stage, Transformer):
transformers.append(stage)
dataset = stage.transform(dataset)
这意味着拟合过程只会验证架构并创建一个新的 PipelineModel
对象。
case t: Transformer =>
t
* 唯一可能的问题是存在非懒惰 Transformers
,但是,除了已弃用的 OneHotEncoder
,Spark 核心 API 不提供此类功能。
** 在 Python:
from pyspark.ml import Transformer, PipelineModel
issubclass(PipelineModel, Transformer)
True
在 Scala 中
import scala.reflect.runtime.universe.typeOf
import org.apache.spark.ml._
typeOf[PipelineModel] <:< typeOf[Transformer]
Boolean = true
我想将几个经过训练的管道连接成一个,这类似于
"
> pipe_model_new = PipelineModel(stages = [pipe_model , pipe_model2])
> final_df = pipe_model_new.transform(df1)
在 Apache Spark 2.0 中 "PipelineModel" 的构造函数被标记为私有的,因此它不能被外部调用。而在 "Pipeline" class 中,只有 "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)
fit
方法没有任何*错误。如果阶段是 Transfomer
,而 PipelineModel
是**,则 fit
就像身份一样。
你可以查看relevant Python:
if isinstance(stage, Transformer):
transformers.append(stage)
dataset = stage.transform(dataset)
这意味着拟合过程只会验证架构并创建一个新的 PipelineModel
对象。
case t: Transformer =>
t
* 唯一可能的问题是存在非懒惰 Transformers
,但是,除了已弃用的 OneHotEncoder
,Spark 核心 API 不提供此类功能。
** 在 Python:
from pyspark.ml import Transformer, PipelineModel
issubclass(PipelineModel, Transformer)
True
在 Scala 中
import scala.reflect.runtime.universe.typeOf
import org.apache.spark.ml._
typeOf[PipelineModel] <:< typeOf[Transformer]
Boolean = true