PySpark独立应用启动报错[WinError 2]:系统找不到指定文件
PySpark启动报错FileNotFoundError的解决办法
你好,我看到你在Windows环境下配置了Java 8、Spark 2.2.1和Hadoop 2.7.5后,运行计算Pi的PySpark代码时遇到了FileNotFoundError: [WinError 2] The system cannot find the file specified的错误,我来帮你分析下问题和解决步骤:
首先看你运行的代码:
import random from pyspark import SparkContext, SparkConf conf = SparkConf().setAppName('MyFirstStandaloneApp') sc = SparkContext(conf=conf) NUM_SAMPLES = 20 def inside(p): x, y = random.random(), random.random() return x*x + y*y < 1 count = sc.parallelize(xrange(0, NUM_SAMPLES)) \ .filter(inside).count() print("Pi is roughly %f" % (4.0 * count / NUM_SAMPLES))
收到的报错信息:
Traceback (most recent call last): File "sample1.py", line 4, in <module> sc = SparkContext(conf=conf) File "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pyspark\\context.py", line 115, in __init__ SparkContext._ensure_initialized(self, gateway=gateway, conf=conf) File "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pyspark\\context.py", line 283, in _ensure_initialized SparkContext._gateway = gateway or launch_gateway(conf) File "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\pyspark\\java_gateway.py", line 80, in launch_gateway proc = Popen(command, stdin=PIPE, env=env) File "C:\\ProgramData\\Anaconda3\\lib\\subprocess.py", line 709, in __init__ restore_signals, start_new_session) File "C:\\ProgramData\\Anaconda3\\lib\\subprocess.py", line 997, in _execute_child startupinfo) FileNotFoundError: [WinError 2] The system cannot find the file specified
问题原因分析
这个错误在Windows环境下的PySpark中很常见,主要原因有这些:
- Java环境变量配置未生效:Spark依赖Java运行环境,如果
JAVA_HOME配置错误或者未添加到系统PATH中,Spark找不到Java就会抛出这个错误。 - Hadoop的winutils缺失:Spark在Windows上运行需要依赖Hadoop的
winutils.exe工具,默认Hadoop安装包(尤其是官网下载的)在Windows下没有这个文件,导致Spark启动失败。 - 你的代码还有个小细节问题:Python 3中已经移除了
xrange,需要改成range,不然解决完启动问题后还会遇到语法错误。
具体解决步骤
确认Java环境配置正确
- 检查
JAVA_HOME环境变量是否指向Java 8的根目录(比如C:\Program Files\Java\jdk1.8.0_291),注意路径不要包含空格或中文(如果有空格可以用短路径或者加引号,但尽量选无空格的目录)。 - 将
%JAVA_HOME%\bin添加到系统PATH环境变量中。 - 打开新的命令行窗口(环境变量修改后需要重启终端才会生效),输入
java -version和javac -version,如果能正常输出Java版本信息,说明配置没问题。
- 检查
补充Hadoop winutils工具
- 下载对应Hadoop 2.7.5版本的winutils(确保版本严格匹配)。
- 将
winutils.exe放到你的Hadoop安装目录的bin文件夹下(比如C:\hadoop-2.7.5\bin)。 - 配置
HADOOP_HOME环境变量指向Hadoop的根目录(C:\hadoop-2.7.5),并将%HADOOP_HOME%\bin添加到系统PATH中。
验证Spark配置
- 确认
SPARK_HOME环境变量指向Spark 2.2.1的根目录,%SPARK_HOME%\bin也添加到PATH。 - 在新的命令行输入
spark-shell,如果能成功进入Spark的Scala交互界面,说明Spark的基础配置没问题。
- 确认
修正代码中的xrange问题
将代码里的xrange(0, NUM_SAMPLES)改成range(0, NUM_SAMPLES),因为Python 3中只有range,xrange是Python 2的语法。
完成这些步骤后,再运行你的PySpark代码,应该就能正常启动并计算Pi的值了。
内容的提问来源于stack exchange,提问作者GLalor
相关产品推荐
相关产品推荐

