我想将几个经过训练的管道连接到一个,这类似于
”Spark 将新的拟合阶段添加到现有 PipelineModel 中,无需再次拟合“但是下面的解决方案适用于 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)
没有任何错误与使用Pipeline并调用fit
方法。如果一个阶段是一个Transfomer
, and PipelineModel
is**, fit
就像身份一样工作。
你可以检查相关Python:
if isinstance(stage, Transformer):
transformers.append(stage)
dataset = stage.transform(dataset)
and 斯卡拉代码:
这意味着拟合过程只会验证模式并创建新的PipelineModel
object.
case t: Transformer =>
t
* 唯一可能担心的是非懒惰的存在Transformers
,但是,除了已弃用的情况外OneHotEncoder
,Spark核心API不提供这样的。
** 在Python中:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)