macOS Big Sur运行PySpark报/usr/libexec/java_home/bin/java不是目录错误
问题根因
报错中的/opt/spark/bin/spark-class: line 71: /usr/libexec/java_home/bin/java: Not a directory说明Spark启动时读取到的JAVA_HOME被错误设置为了/usr/libexec/java_home(Mac上查找Java路径的命令)而非实际JDK安装路径。你在终端验证的JAVA_HOME配置正确,是因为PyCharm默认不会加载终端的shell配置(.zshrc/.bash_profile等),二者的环境变量相互独立。
解决方法1:代码内显式指定环境变量(优先级最高,生效最快)
直接在你现有代码的os.environ["SPARK_HOME"]行下方新增JAVA_HOME的指定,修改后代码开头如下:
import os os.environ["SPARK_HOME"] = "/opt/spark" os.environ["JAVA_HOME"] = "/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home" from pyspark.sql import SparkSession
修改后直接运行即可。
解决方法2:修改PyCharm运行配置
如果不想修改代码,可单独调整当前脚本的运行环境变量:
- 点击PyCharm右上角运行按钮旁的下拉框,选择
Edit Configurations - 在左侧选中你运行的
LOL.py配置项 - 找到
Environment variables项,点击右侧的编辑按钮 - 新增一条环境变量,键为
JAVA_HOME,值为/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home - 保存配置后重新运行脚本即可。
验证方法
你可以在代码最开头添加一行打印逻辑,确认PyCharm实际读取的JAVA_HOME是否正确:
import os print("当前读取的JAVA_HOME为:", os.environ.get("JAVA_HOME"))
如果输出不是你预期的JDK路径,按上述两种方法调整即可。
额外说明:你本地同时安装的Java 11不会影响运行,只要指定的JAVA_HOME指向Java 8路径即可适配PySpark 2.4.0的版本要求。
内容的提问来源于stack exchange,提问作者jd2050
相关产品推荐
相关产品推荐

