StringIndexerModel 输入列

StringIndexerModel inputCol

我有一个带有 spark 2.1 的集群和一个进程,该进程最后写入文件 PipelineModel,其中包含一个 StringIndexerModel。我可以在本地(使用 spark 2.3)加载管道并检查 StringIndexerModel。看起来很奇怪的是,两个版本的方法和字段不同,即使它们读取相同的文件。特别是,对于 spark 2.1,字段 inputCol 似乎不存在,即使显然需要它来使 StringIndexer 工作。

这就是我得到的。

星火 2.1:

pip1 = PipelineModel.load("somepath")
si = pip1.stages[0]
si
#StringIndexer_494eb1f86ababc8540e2
si.inputCol
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#AttributeError: 'StringIndexerModel' object has no attribute 'inputCol'

Spark 2.3

pip1 = PipelineModel.load("somepath")
si = pip1.stages[0]
si
#StringIndexer_494eb1f86ababc8540e2
si.inputCol
#Param(parent='StringIndexer_494eb1f86ababc8540e2', name='inputCol', doc='input column name')

我知道方法和字段可能会从一个版本更改为另一个版本,但 inputCol 必须在对象中的某个位置,因为必须使 fittransform工作。有没有办法用 PySpark 提取 spark 2.1 中的 inputCol

Spark ML 中的繁重工作由内部 Java 对象 (_java_obj) 完成,这就是对象可以工作的原因,即使内部从未在 Python 中完全暴露API。这当然限制了无需深入 Java API 就可以完成的工作,并且由于 Spark 2.3 Params 在 PySpark 模型 (SPARK-10931).

中公开

在以前的版本中,您可以访问内部模型,并从那里获取数据。但是,如果您想获得 Param 的值,您应该使用 get* 方法,而不是 Param 本身。

si._java_obj.getInputCol()

相关:

  • pyspark: getting the best model's parameters after a gridsearch is blank {}