PySpark执行collect/take操作报错求助:无法找到python3
PySpark执行collect/take时Py4JJavaError报错解决
问题场景
PySpark新手入门,导入CSV文件并按逗号分割后,执行collect()或take()操作触发错误,核心报错信息为:
Cannot run program "python3": CreateProcess error=2, The system cannot find the file specified
用户代码:
import os import sys from pyspark import SparkContext sc = SparkContext(master='local',appName='test_advent') print(sc) path = r'C:\Users\Documents\spark\Adventure\Adventure_RDD' file = os.path.join(path,'Employee.csv') Employee_RDD = sc.textFile(file) Employee_RDD = Employee_RDD.map(lambda x:x.split(',')) print(Employee_RDD.collect())
报错原因
Windows系统中默认Python可执行文件名为python.exe,而Spark默认尝试调用python3命令,导致找不到对应可执行程序,进而触发Java IO异常。
解决方案
方案1:代码中指定Python环境变量
在导入SparkContext前添加环境变量配置,强制Spark使用python命令:
import os os.environ['PYSPARK_PYTHON'] = 'python' os.environ['PYSPARK_DRIVER_PYTHON'] = 'python'
方案2:创建python3软链接(Windows)
- 找到Python安装目录(如
C:\Users\你的用户名\Anaconda3) - 复制目录下的
python.exe,并重命名为python3.exe - 确保该目录已添加到系统PATH环境变量中
方案3:修改Spark全局配置文件
- 找到Spark安装目录下的
conf文件夹 - 复制
spark-env.cmd.template并重命名为spark-env.cmd - 打开文件添加以下内容:
set PYSPARK_PYTHON=python set PYSPARK_DRIVER_PYTHON=python
修正后完整代码
import os import sys # 配置Python环境变量 os.environ['PYSPARK_PYTHON'] = 'python' os.environ['PYSPARK_DRIVER_PYTHON'] = 'python' from pyspark import SparkContext sc = SparkContext(master='local',appName='test_advent') print(sc) path = r'C:\Users\Documents\spark\Adventure\Adventure_RDD' file = os.path.join(path,'Employee.csv') Employee_RDD = sc.textFile(file) Employee_RDD = Employee_RDD.map(lambda x:x.split(',')) print(Employee_RDD.collect())
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

