如果自定义PySpark Transformer在适合的ML管道中处于舞台状态,如何设置参数?

时间:2018-02-06 12:15:38

标签: apache-spark pyspark apache-spark-ml

我已按照显示的here模式为自己的Python算法编写了自定义ML管道EstimatorTransformer

但是,在该示例中,_transform()所需的所有参数都通过估算器的_fit()方法方便地传递到模型/变换器中。但是我的变换器有几个参数来控制变换的应用方式。这些参数特定于变压器,因此事先将它们与用于拟合模型的估算器特定参数一起传递到估算器中会感觉很奇怪。

我可以通过向变换器添加额外的Params来解决这个问题。当我在ML Pipeline之外使用我的估算器和变换器时,这很好用。但是,如果我的估算器对象已添加为管道的一个阶段,我该如何设置这些特定于变压器的参数?例如,您可以在getStages()上致电pyspark.ml.pipeline.Pipeline,因此可以获取估算工具,但getStages()上没有相应的PipelineModel方法。我无法在PipelineModel阶段看到任何设置参数的方法。

那么在我在拟合的管道模型上调用transform()之前,如何在变换器上设置参数?我在Spark 2.2.0上。

1 个答案:

答案 0 :(得分:1)

getStages()上没有PipelineModel方法,但同一个班级的undocumented member名为stages

例如,如果您刚刚安装了一个包含3个阶段的管道模型,并且您想在第二个阶段设置一些参数,那么您可以执行以下操作:

myModel = myPipelineModel.stages[1]
myModel.setMyParam(42)
# Or in one line:
#myPipelineModel.stages[1].setMyParam(42)

# Now we can push our data through the fully configured pipeline model:
resultsDF = myPipelineModel.transform(inputDF)