Skip to content

如何解决 ModuleNotFoundError: No module named 'pyspark'

Posted on:2024年6月9日 at 20:12

最近在Linux上安装了PySpark后,在导入pyspark时遇到了以下错误:

ModuleNotFoundError: No module named 'pyspark'

尽管在终端中运行pyspark命令可以正常启动,但在Python脚本中导入pyspark时仍然出现上述错误。

环境设置

首先,我在.bashrc文件中添加了以下几行来设置环境变量:

export SPARK_HOME=~/Spark/spark-3.0.1-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.9-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3

通过这些设置,我可以在终端中成功运行pyspark,并且在终端中执行所有的编码操作都没有问题。然而,当我尝试在Python脚本中导入pyspark时,仍然遇到ModuleNotFoundError错误。

解决方案

确保环境变量设置正确

首先,确认环境变量已经正确设置。可以在终端中运行以下命令:

source ~/.bashrc
echo $SPARK_HOME

如果输出显示了正确的Spark路径,则说明环境变量设置正确。

使用findspark模块

如果环境变量已经正确设置,但问题仍然存在,可以尝试使用findspark模块来初始化Spark环境。在Python脚本中添加以下代码:

import findspark
findspark.init('/path/to/spark_home')

例如:

import findspark
findspark.init('~/Spark/spark-3.0.1-bin-hadoop2.7/')

设置PYSPARK_SUBMIT_ARGS

在某些情况下,需要设置PYSPARK_SUBMIT_ARGS环境变量来指定Spark作业的参数。在.bashrc文件中添加以下行:

export PYSPARK_SUBMIT_ARGS="--name job_name --master local --conf spark.dynamicAllocation.enabled=true pyspark-shell"

或者在Python代码中添加以下内容:

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = "--name job_name --master local --conf spark.dynamicAllocation.enabled=true pyspark-shell"

其他注意事项

  1. 确保使用正确的Python版本:在某些情况下,不同版本的Python可能会导致兼容性问题。可以通过以下命令指定Python版本:

    python3.7 script.py
    
  2. 检查PySpark安装路径:确保PySpark安装在正确的路径,并且路径中没有拼写错误。

  3. 使用虚拟环境:建议在虚拟环境中安装和运行PySpark,以避免系统环境中的冲突。