Как лучше установить зависимости в кластере Sagemaker PySpark

#apache-spark #pyspark #amazon-sagemaker

#apache-spark #pyspark #amazon-sagemaker

Вопрос:

Я пытаюсь запустить задание обработки для машинного обучения, используя новый контейнер Sagemaker Spark. Кластер запускается, но я сразу же сталкиваюсь с ошибкой импорта — мои зависимости отсутствуют.

Я понимаю, что контейнер Spark не имеет этих зависимостей, и я попытался выполнить шаги, описанные в SO, чтобы установить их, а именно, используя параметр submit_py_files в PySparkProcessor.run(), чтобы отправить ZIP-файл со всеми моими зависимостями. Однако, похоже, он их не устанавливает.

Есть ли способ использовать класс Sagemaker PySparkProcessor для выполнения сценария начальной загрузки при запуске кластера? В настоящее время я пытаюсь запустить рабочую нагрузку обработки, которая использует pandas_udfs, и вижу ImportError, когда кластер пытается использовать PyArrow:

 Traceback (most recent call last):
    File "/opt/ml/processing/input/code/spark_preprocess.py", line 35 in <module>
    @pandas_udf("float", PandasUDFType.GROUPED_AGG)
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/udf.py", line 47, in _create_udf
    File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 149 in require_minimum_pyarrow_version
    ImportError: PyArrow >= 0.8.0 must be installed; however, it was not found.
  

The dependencies.zip содержит PyArrow 0.16.0, и я использую последнюю версию Sagemaker Python SDK.

Я знаю, что с помощью EMR вы можете отправить сценарий действия начальной загрузки для установки зависимостей — есть ли здесь аналогичный вариант? Спасибо!