StringIndexerModel inputCol - PullRequest
       30

StringIndexerModel inputCol

0 голосов
/ 25 октября 2018

У меня есть кластер с искрой 2.1 и процесс, который в конце записывает в файл PipelineModel, который содержит StringIndexerModel.Я могу локально (с искрой 2.3) загрузить трубопровод и проверить StringIndexerModel.То, что кажется очень странным, - это то, что метод и поля отличаются в двух версиях, даже если они читают одни и те же файлы.В частности, в spark 2.1 поле inputCol, по-видимому, отсутствует, даже если оно явно необходимо для работы StringIndexer.

Это то, что я получаю.

Spark 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 должен быть где-то в объекте, так как это необходимо сделатьfit или transform работа.Есть ли способ извлечь inputCol в spark 2.1 с помощью PySpark?

1 Ответ

0 голосов
/ 25 октября 2018

Тяжелая работа в Spark ML выполняется внутренними объектами Java (_java_obj), поэтому объекты могут работать, даже если внутренние никогда полностью не отображаются в Python API.Это, конечно, ограничивает то, что можно сделать без детализации в Java API, и поскольку Spark 2.3 Params предоставляется в моделях PySpark ( SPARK-10931 ).

В предыдущих версиях вы могли получить доступвнутренняя модель, и получить данные оттуда.Однако, если вы хотите получить значение Param, вам следует использовать метод get*, а не Param как таковой.

si._java_obj.getInputCol()

Связанный:

...