PySpark与Python2.7(Pycharm)集成及运行报错求助
嘿,这两个问题都是Windows上用PyCharm搭PySpark+Python2.7时常见的坑,我来给你一步步解决:
问题1:永久解决PyCharm找不到PySpark模块的问题
每次重启IDE都要手动加内容根确实麻烦,给你两个彻底的方案:
配置系统环境变量(一劳永逸)
找到你的Spark解压目录,把下面两个路径加到系统的PYTHONPATH环境变量里:- Spark安装目录下的
python文件夹(比如D:\spark-2.3.0-bin-hadoop2.7\python) - Spark安装目录下
python/lib里的py4j压缩包(比如D:\spark-2.3.0-bin-hadoop2.7\python\lib\py4j-0.10.6-src.zip,注意py4j版本要和你Spark里的一致)
配置完重启电脑,PyCharm会自动读取这个环境变量,再也不用手动加内容根了。
- Spark安装目录下的
在PyCharm解释器里直接添加路径
打开PyCharm的File > Settings > Project: [你的项目名] > Project Interpreter,点击右上角的齿轮图标选择Show All,选中你的Python2.7解释器后,点右侧的Show paths for the selected interpreter,把上面提到的两个Spark路径添加进去,保存后就永久生效,重启IDE也不会丢失配置。
问题2:winutils缺失与ArrayIndexOutOfBoundsException异常
这个是Windows环境下Spark的经典问题,因为Hadoop的winutils工具默认没有包含在Spark包中,得手动配置:
下载并配置winutils.exe
- 下载和你Hadoop版本(这里是2.7)匹配的winutils.exe,放到一个新建的
hadoop/bin目录下(比如D:\hadoop\bin) - 配置系统环境变量:
- 添加
HADOOP_HOME,值为D:\hadoop(也就是刚才bin目录的上级目录) - 添加
SPARK_HOME,值为你的Spark解压目录(比如D:\spark-2.3.0-bin-hadoop2.7) - 把
%HADOOP_HOME%\bin和%SPARK_HOME%\bin加到系统的Path环境变量里
- 添加
- 重启PyCharm让环境变量生效
- 下载和你Hadoop版本(这里是2.7)匹配的winutils.exe,放到一个新建的
关于ArrayIndexOutOfBoundsException
这个异常大多是winutils配置不全导致的连锁问题,当winutils能正常被Spark找到后,这个数组越界错误大概率会自动消失。如果还存在,再检查你的脚本里处理大文本文件的逻辑,比如是否有数组索引超出长度的操作,但优先解决winutils的问题。
另外提个小细节:Spark 2.3.0只兼容JDK 1.8,确保你安装的是JDK8版本,别用JDK11及以上,不然也会触发各种奇怪的错误。
内容的提问来源于stack exchange,提问作者M PAUL

