#python #pandas #apache-spark #pyspark #conda
Вопрос:
Я следую этому руководству по распределению зависимостей pandas и pyarrow между узлами-исполнителями в моем приложении PySpark amp; YARN. Это необходимо для запуска Pandas UDF.
Я создаю виртуальную среду Conda примерно так:
conda create -y -n pyspark_conda_env -c conda-forge pyarrow pandas conda-pack
conda activate pyspark_conda_env
conda pack -f -o pyspark_conda_env.tar.gz
Затем отправьте задание Spark:
spark_job_config_path = '/tmp/spark_job_config.json'
cmd = [
"spark-submit",
"--master",
"yarn",
"--deploy-mode",
"client",
"--archives",
"/opt/program/pyspark_conda_env.tar.gz#environment",
"/opt/program/image_analysis_launcher.py",
]
cmd.extend([spark_job_config_path])
subprocess.run(cmd, check = True)
Я создаю сеанс Spark следующим образом:
spark = SparkSession.builder.master("yarn").config("spark.yarn.dist.archives", "pyspark_conda_env.tar.gz#environment").appName("AppName").getOrCreate()
После запуска контейнера Docker, в котором находится эта программа, я получаю следующее сообщение об ошибке:
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.io.FileNotFoundException: File file:/usr/spark-3.1.2/pyspark_conda_env.tar.gz#environment does not exist
Я пробовал использовать VirtualEnv и PEX для упаковки зависимостей, но появляется аналогичное сообщение об ошибке. Есть какое-нибудь представление о том, почему это происходит?