Apache spark 我可以在spark ML管道中设置阶段名称吗?

Apache spark 我可以在spark ML管道中设置阶段名称吗?,apache-spark,pyspark,pipeline,Apache Spark,Pyspark,Pipeline,我开始创建更复杂的ML管道,并多次使用相同类型的管道阶段。是否有一种方法可以设置阶段的名称,以便其他人可以轻松地查询保存的管道并了解发生了什么?e、 g vecAssembler1 = VectorAssembler(inputCols = ["P1", "P2"], outputCol="features1") vecAssembler2 = VectorAssembler(inputCols = ["P3", "P4"], outputCol="features2") lr_1 = Logi

我开始创建更复杂的ML管道,并多次使用相同类型的管道阶段。是否有一种方法可以设置阶段的名称,以便其他人可以轻松地查询保存的管道并了解发生了什么?e、 g

vecAssembler1 = VectorAssembler(inputCols = ["P1", "P2"], outputCol="features1")
vecAssembler2 = VectorAssembler(inputCols = ["P3", "P4"], outputCol="features2")
lr_1 = LogisticRegression(labelCol = "L1")
lr_2 = LogisticRegression(labelCol = "L2")
pipeline = Pipeline(stages=[vecAssembler1, vecAssembler2, lr_1, lr_2])
print pipeline.stages
这将返回如下内容:

[VectorAssembler_4205a9d090177e9c54ba, VectorAssembler_42b8aa29277b380a8513, LogisticRegression_42d78f81ae072747f88d, LogisticRegression_4d4dae2729edc37dc1f3]
但我想做的是:

pipeline = Pipeline(stages=[vecAssembler1, vecAssembler2, lr_1, lr_2], names=["VectorAssembler for predicting L1","VectorAssembler for predicting L1","LogisticRegression for L1","LogisticRegression for L2")
这样,保存的管道模型可以由第三方加载,并且它们将获得良好的描述:

print pipeline.stages
# [VectorAssembler for predicting L1,VectorAssembler for predicting L2,LogisticRegression for L1,LogisticRegression for L2]
您可以使用方法重命名每个变压器/估计器:

vecAssembler1 = VectorAssembler(inputCols = ["P1", "P2"], outputCol="features1")
vecAssembler1._resetUid("VectorAssembler for predicting L1")

默认情况下,它使用java的UID随机生成器。

现在我使用它-它在我创建的管道上工作,但在保存和加载时不工作。我猜当再次加载时,所有阶段的新实例都会被创建,它使用的默认值是java的UID随机生成器。有什么想法吗?谢谢你用什么版本的spark?试着检查一下spark-2.3:太好了。不,我现在用的是2.2。期待2.3,但等待组织赶上!谢谢@prudenko,我也面临同样的问题。加载保存的模型时,UID正在更改。我正在使用pyspark 2.4.4。请给出一些示例,说明我们如何在保存这些UID的同时保持它们,以便在加载pipelineModel后按原样获取它们