You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks配置PySpark作业使用PEX依赖时遇文件不存在问题

在Databricks UI中运行带PEX依赖的PySpark作业解决方案

针对你遇到的PEX文件找不到的问题,核心原因是Databricks环境与EMR YARN的文件路径、工作目录结构存在差异,以下是可行的解决方法:

问题根源

  1. Databricks中--files上传的文件并非存放在当前工作目录,而是每个节点的Spark临时存储目录,直接用./my_pex.pex无法定位到文件。
  2. 缺少PEX执行权限或未配置PEX临时解压目录的环境变量,导致PEX无法正常执行。

解决方案

方案1:直接使用DBFS绝对路径(最简便)

  1. 将PEX文件上传到DBFS(可通过Databricks UI或命令行同步),并赋予可执行权限:
    dbutils.fs.chmod("dbfs:/deps/my_pex.pex", "755")
    
  2. 修改spark-submit参数,指定PEX的绝对路径并配置PEX_ROOT:
    [
      "--conf", "spark.pyspark.driver.python=/dbfs/deps/my_pex.pex",
      "--conf", "spark.pyspark.executor.python=/dbfs/deps/my_pex.pex",
      "--conf", "spark.driverEnv.PEX_ROOT=/tmp/pex_temp",
      "--conf", "spark.executorEnv.PEX_ROOT=/tmp/pex_temp",
      "dbfs:/path/to/main.py",
      "--some_arg", "2022-08-01"
    ]
    

方案2:结合--files与Spark临时目录路径

如果必须通过--files传递PEX,可通过Spark本地目录定位文件:

[
  "--files", "s3://some_path/my_pex.pex",
  "--conf", "spark.pyspark.driver.python=$(find ${SPARK_LOCAL_DIRS} -name my_pex.pex | head -1)",
  "--conf", "spark.pyspark.executor.python=$(find ${SPARK_LOCAL_DIRS} -name my_pex.pex | head -1)",
  "--conf", "spark.driverEnv.PEX_ROOT=/tmp/pex_temp",
  "--conf", "spark.executorEnv.PEX_ROOT=/tmp/pex_temp",
  "s3://some_path/main.py",
  "--some_arg", "2022-08-01"
]

${SPARK_LOCAL_DIRS}是Databricks节点上Spark临时目录的环境变量,通过find命令可准确定位到上传的PEX文件。

方案3:使用集群初始化脚本同步PEX到本地

创建集群初始化脚本(同步PEX到每个节点本地目录并赋予权限):

#!/bin/bash
# 从S3同步PEX到本地临时目录
aws s3 cp s3://some_path/my_pex.pex /tmp/my_pex.pex
# 添加可执行权限
chmod +x /tmp/my_pex.pex

将脚本上传到DBFS后,在集群配置中添加该初始化脚本。之后spark-submit参数可直接使用本地路径:

[
  "--conf", "spark.pyspark.driver.python=/tmp/my_pex.pex",
  "--conf", "spark.pyspark.executor.python=/tmp/my_pex.pex",
  "--conf", "spark.driverEnv.PEX_ROOT=/tmp/pex_temp",
  "--conf", "spark.executorEnv.PEX_ROOT=/tmp/pex_temp",
  "s3://some_path/main.py",
  "--some_arg", "2022-08-01"
]

注意事项

  • 确保PEX文件是针对Databricks Runtime的Python版本打包的(比如Runtime 11.3用Python 3.8,打包PEX时需对应版本)。
  • 避免使用相对路径引用PEX,Databricks的工作目录结构与EMR不同,相对路径不可靠。
  • PEX_ROOT需指定节点上有写入权限的目录,默认/tmp即可满足需求。

内容的提问来源于stack exchange,提问作者r_g_s_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:45:33