Windows环境PySpark启动Jupyter而非交互Shell及读取文件报错问题
嘿,刚好我入门PySpark时也踩过这两个坑,给你详细梳理下原因和解决方案:
为什么运行
pyspark启动的是Jupyter Notebook而非Python Shell? 这是因为你的Windows系统环境变量里,配置了让PySpark默认用Jupyter作为驱动程序。具体来说,大概率是这两个环境变量被设置了:
PYSPARK_DRIVER_PYTHON:这个变量指定PySpark运行时调用的Python解释器,如果你把它设成了jupyter,启动时就会打开Jupyter而不是默认的Python交互式Shell。PYSPARK_DRIVER_PYTHON_OPTS:这个变量是传给驱动程序的参数,如果设成了notebook,就会直接触发Jupyter Notebook的启动界面。
如果想临时切换回Python Shell,你可以在命令提示符里先覆盖这两个变量再运行pyspark:
set PYSPARK_DRIVER_PYTHON=python set PYSPARK_DRIVER_PYTHON_OPTS= pyspark
要是想永久修改,就右键「此电脑」→「属性」→「高级系统设置」→「环境变量」,找到对应的变量删掉或者改成你需要的值就行。
解决Jupyter Notebook中读取README.md报错的问题
这个报错90%以上都是文件路径不对或者文件根本不在你指定的位置,可以按下面的步骤排查解决:
先确认文件的真实位置
PySpark自带的README.md一般在你的Spark安装目录根目录下,比如你把Spark装在了C:\spark-3.5.0,那文件路径就是C:\spark-3.5.0\README.md。检查Jupyter的当前工作目录
在Notebook里先跑一段代码,看看当前的工作路径是什么:
import os print(os.getcwd())
如果README.md不在这个路径下,就必须用绝对路径来读取,比如:
# Windows路径可以用斜杠,或者双反斜杠 textFile = spark.read.text("C:/spark-3.5.0/README.md")
当然,你也可以直接把README.md复制到当前工作目录下,这样用相对路径"README.md"就能读取了。
- 其他小概率排查点
- 如果文件确实存在但还是报错,检查下文件权限(不过个人Windows用户一般不会遇到这个问题)。
- 确认
spark对象已经正确初始化,如果Notebook里找不到spark变量,得先手动创建SparkSession:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadTest").getOrCreate() textFile = spark.read.text("README.md")
内容的提问来源于stack exchange,提问作者Mahesha999
相关产品推荐
相关产品推荐

