为什么PySpark创建SparkSession时找不到spark-submit文件?
问题根因
你遇到的报错核心由.bashrc配置的两处错误导致,和Java权限无关:
SPARK_HOME赋值时用单引号包裹了带波浪线~的路径,单引号会阻止shell对家目录展开符~做解析,Spark实际读取到的是字面量为~/Spark/spark-3.1.2-bin-hadoop3.2的路径,系统无法识别字面量带~的路径,因此抛出文件不存在的错误。PATH变量中仅添加了$SPARK_HOME,未添加Spark可执行文件所在的$SPARK_HOME/bin目录,导致全局调用Spark命令时无法找到对应程序。
加sudo可以正常执行的原因是:在bin目录下执行sudo ./spark-shell是直接指定当前目录的可执行文件运行,不会读取当前普通用户的SPARK_HOME环境变量,因此可以正常运行。你提到的路径中多出来的./不是问题诱因,只要前面的根路径正确,该拼接路径本身是有效的。
解决步骤
- 编辑
~/.bashrc文件,修改对应配置:- 将
SPARK_HOME的赋值改为无单引号的写法,或者直接替换为绝对路径(将路径中的squid替换为你的实际用户名):
# 写法1:去掉单引号让波浪线正常展开 export SPARK_HOME=~/Spark/spark-3.1.2-bin-hadoop3.2 # 写法2:直接写绝对路径,兼容性更好 # export SPARK_HOME=/home/squid/Spark/spark-3.1.2-bin-hadoop3.2- 将
PATH配置中的$SPARK_HOME替换为$SPARK_HOME/bin:
export PATH=$SPARK_HOME/bin:$PATH:~/.local/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin - 将
- 保存
.bashrc后执行以下命令让配置生效:source ~/.bashrc - 验证配置:
- 执行
echo $SPARK_HOME,确认输出为不带~的完整绝对路径 - 无需加sudo直接执行
spark-shell --version,确认可以正常输出版本信息 - 重启Jupyter Notebook后再初始化SparkSession即可正常运行
- 执行
内容的提问来源于stack exchange,提问作者impulsive squid squealer
相关产品推荐
相关产品推荐

