Spark Pipeline 类
在 Spark 中,Pipeline 是一个简单的管道,它可以作为一个估计器(Estimator)。Pipeline 由一系列阶段(stage)组成,每个阶段都是一个 Estimator 或者 Transformer。当调用 Pipeline.fit
方法时,阶段会按顺序执行。如果一个阶段是一个 Estimator,则会调用其 Estimator.fit
方法来拟合模型。然后,该模型作为一个 Transformer 被用于将数据集转换为下一个阶段的输入。如果一个阶段是一个 Transformer,则会调用其 Transformer.transform
方法来生成下一个阶段的数据集。从 Pipeline 拟合得到的模型是一个 PipelineModel,它包含了对应于 Pipeline 阶段的拟合模型和变换器。如果没有阶段,Pipeline 就充当一个恒等变换器。
构造方法和属性
class Pipeline @Since("1.4.0") (
@Since("1.4.0") override val uid: String) extends Estimator[PipelineModel] with MLWritable {
@Since("1.4.0")
def this() = this(Identifiable.randomUID("pipeline"))
/**
* param for pipeline stages
* @group param
*/
@Since("1.2.0")
val stages: Param[Array[PipelineStage]] = new Param(this, "stages", "stages of the pipeline")
/** @group setParam */
@Since("1.2.0")
def setStages(value: Array[_ <: PipelineStage]): this.type = {
set(stages, value.asInstanceOf[Array[PipelineStage]])
this
}
/** @group getParam */
@Since("1.2.0")
def getStages: Array[PipelineStage] = $(stages).clone()
}
uid
是 Pipeline 的唯一标识符。stages
是一个参数,表示 Pipeline 的阶段。它是一个数组类型的参数,包含了多个 PipelineStage。
方法
fit 方法
override def fit(dataset: Dataset[_]): PipelineModel
- 该方法用于将 Pipeline 拟合到输入数据集上,并返回拟合后的 PipelineModel。
- 对于每个阶段,如果是一个 Estimator,则调用其
Estimator.fit
方法来拟合模型;如果是一个 Transformer,则调用其Transformer.transform
方法来生成下一个阶段的数据集。 - 最终得到的 PipelineModel 包含了对应于 Pipeline 阶段的拟合模型和变换器。
copy 方法
override def copy(extra: ParamMap): Pipeline
- 该方法用于创建一个新的 Pipeline 对象,并复制当前 Pipeline 的参数和阶段。
- 可以使用额外的参数(extra)来复制 Pipeline 的超参数值。
transformSchema 方法
override def transformSchema(schema: StructType): StructType
- 该方法用于根据输入模式推导输出模式。
- 会依次调用每个阶段的
transformSchema
方法,将前一个阶段的输出模式作为下一个阶段的输入模式进行推导。 - 返回最终的输出模式。
其他方法
setStages
方法用于设置 Pipeline 的阶段。getStages
方法用于获取 Pipeline 的阶段。
注意事项
- Pipeline 是 Spark ML 中的一个核心概念,用于将多个 Estimator 和 Transformer 组合成一个工作流程,并实现数据处理和模型拟合的流水线操作。
- 可以通过添加不同的 Estimator 和 Transformer 来构建自定义的 Pipeline。
- 拟合后得到的 PipelineModel 可以用于对新数据集进行变换和预测。