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

PySpark配置spark.local.dir解决No space left on device磁盘不足报错

配置不生效的核心原因

你尝试的配置未生效有两个原因:

  1. 你使用的spark.local.dirs为非官方的错误配置项,Spark 3.1.2的官方标准临时目录配置项为单数的spark.local.dir
  2. 该配置属于Spark启动时加载的静态配置,必须在SparkSession初始化完成前配置,你在调用getOrCreate()之后再修改配置,不会覆盖已经加载完成的运行时参数。

可用解决方案

方法1:构建SparkSession时直接指定配置

在创建SparkSession的builder阶段传入临时目录参数,示例代码如下:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .config('spark.local.dir', '/home/tmp') \
    .getOrCreate()

如果需要配置多块磁盘的路径提升IO性能,可以用逗号分隔多个路径:

.config('spark.local.dir', '/home/tmp1,/data/tmp2')

方法2:通过环境变量全局配置

如果不想每次写代码都指定,可以在Ubuntu系统中配置SPARK_LOCAL_DIRS环境变量,生效范围为当前用户的所有PySpark任务:

  1. 编辑当前用户的bash配置文件:
vim ~/.bashrc
  1. 末尾添加如下内容:
export SPARK_LOCAL_DIRS=/home/tmp
  1. 加载配置使其生效:
source ~/.bashrc

之后启动的所有PySpark任务都会默认使用你指定的路径作为临时文件存储目录。

方法3:启动pyspark命令时直接传参

如果是通过命令行直接启动pyspark交互环境,可以在启动命令中带上参数:

pyspark --conf spark.local.dir=/home/tmp

注意事项

  • 配置前需要提前创建你指定的目录,比如示例中的/home/tmp,并且保证运行PySpark的用户对该目录有读写权限,可以用如下命令设置权限:
mkdir -p /home/tmp && chmod 777 /home/tmp
  • 如果你是在YARN集群模式下运行任务,还需要同时配置YARN的节点本地目录yarn.nodemanager.local-dirs,否则Shuffle临时文件还是会写入默认路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:18:05