Как добавить в путь к классу запущенного сеанса PySpark

#pyspark #jar #pmml

Вопрос:

У меня есть ноутбук PySpark, работающий в AWS EMR. В моем конкретном случае я хочу использовать pyspark2pmml pmml для создания модели, которую я только что обучил. Однако я получаю следующую ошибку (при запуске pyspark2pmml.PMMLBuilder , но я не думаю, что это имеет значение).

 JPMML-SparkML not found on classpath
Traceback (most recent call last):
  File "/tmp/1623111492721-0/lib/python3.7/site-packages/pyspark2pmml/__init__.py", line 14, in __init__
    raise RuntimeError("JPMML-SparkML not found on classpath")
RuntimeError: JPMML-SparkML not found on classpath
 

Я знаю, что это вызвано тем, что мой сеанс Spark не имеет ссылки на необходимый класс. Чего я не знаю, так это как начать сеанс Spark с этим доступным классом. Я нашел еще один ответ , используя %%conf -f , но это изменило другие настройки, которые, в свою очередь, удерживали меня от использования sc.install_pypi_package , в котором я также нуждался.

Есть ли способ, которым я мог бы запустить сеанс Spark с помощью этого доступного класса JPMML, но без изменения каких-либо других настроек?

Ответ №1:

Итак, вот ответ, но не тот, который мне нужен.

Чтобы добавить этот класс в путь к классам, я могу начать свою работу с этого:

 %%configure -f
{
    "jars": [
        "{some_path_to_s3}/jpmml-sparkml-executable-1.5.13.jar"
    ]
}
 

Это создает проблему, на которую я ссылался выше, когда у меня нет такой возможности sc.install_pypi_package . Однако я могу добавить этот пакет более ручным способом. Первым шагом было создание zip-файла только из необходимых модулей, используя zip-файл с github проекта (в данном случае только pyspark2pmml каталог, а не весь zip). Затем этот модуль можно добавить с помощью sc.addPyFile

 sc.addPyFile('{some_path_to_s3}/pyspark2pmml.zip')
 

После этого я смогу выполнить исходные команды точно так, как я ожидал.