Jupyter Notebook中PySpark调用numpy失败问题求助
PySpark提示ModuleNotFoundError: No module named 'numpy'但已安装numpy的解决方法
问题原因
Spark的Driver进程(你的Jupyter Notebook)和Executor进程(Spark任务执行的worker)使用的Python环境不一致。Driver环境里已经安装了numpy,但Executor使用的Python环境没有安装该模块,导致执行分布式任务时触发报错。
解决方案
1. 确认Python环境路径
先在Jupyter中运行以下代码,确认当前Driver使用的Python路径以及是否安装numpy:
import sys print("Driver Python路径:", sys.executable) !{sys.executable} -m pip list | grep numpy
如果输出中能看到numpy,说明Driver环境没问题,问题出在Executor的Python环境。
2. 配置Spark让Executor使用正确的Python环境
有三种方式可以配置:
方式一:启动Jupyter前设置环境变量
在终端中先设置SPARK_PYTHON环境变量,再启动Jupyter:
export SPARK_PYTHON=/path/to/your/python/with/numpy jupyter notebook
替换/path/to/your/python/with/numpy为你刚才输出的Python路径(比如/usr/local/bin/python3或者虚拟环境的Python路径)。
方式二:在Jupyter中配置SparkConf
在初始化SparkSession之前,指定Executor使用的Python路径:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("TF-IDF处理") \ .master("local[*]") \ .config("spark.executorEnv.PYSPARK_PYTHON", "/path/to/your/python/with/numpy") \ .getOrCreate()
同样替换路径为你的Python路径。
方式三:使用pyspark命令时指定Python路径
如果是直接用pyspark shell,启动时指定:
PYSPARK_PYTHON=/path/to/your/python/with/numpy pyspark
3. 验证配置是否生效
运行以下代码测试Executor是否能找到numpy:
spark.sparkContext.parallelize([1,2,3]).map(lambda x: __import__('numpy').array([x])).collect()
如果返回[array([1]), array([2]), array([3])],说明配置成功,再运行你的余弦相似度矩阵代码即可正常执行。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

