You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dataproc集群PySpark中使用spaCy遇No module named 'spacy'错误

解决Dataproc集群中Spark调用spaCy报错"No module named 'spacy'"的方案

1. 确认集群全节点的spaCy安装状态

  • Spark任务会分发到所有工作节点执行,因此主节点和工作节点都必须安装指定版本的spaCy。
  • 登录主节点执行 pip list | grep spacy 检查安装状态;通过 gcloud dataproc ssh <集群名> --worker=0 登录工作节点,重复检查操作。
  • 若工作节点未安装,在主节点执行集群级安装命令:
    gcloud dataproc jobs submit pyspark --cluster <集群名> --region <区域> -c "!pip install spacy==3.2.1"
    

2. 对齐Spark与Python环境路径

  • 在Jupyter中执行以下代码,确认当前Python解释器路径:
    import sys
    print(sys.executable)
    
  • 执行 !which pip 检查pip对应的Python路径,确保两者一致。若不一致,说明Spark使用了独立的Python环境。
  • 初始化Spark会话时指定正确的Python路径:
    from pyspark.sql import SparkSession
    spark = SparkSession.builder \
        .appName("spaCy-NER") \
        .config("spark.pyspark.python", "/usr/bin/python3")  # 替换为实际路径
        .getOrCreate()
    

3. 通过Spark配置强制传递依赖(推荐)

  • 创建集群或提交任务时,直接通过参数指定spaCy依赖,确保所有节点同步安装:
    gcloud dataproc jobs submit pyspark --cluster <集群名> --region <区域> --packages spacy==3.2.1 your_script.py
    
  • 在Jupyter中重启Spark会话时添加配置:
    spark.stop()
    spark = SparkSession.builder \
        .appName("spaCy-NER") \
        .config("spark.pyspark.driver.python", "/usr/bin/python3")
        .config("spark.pyspark.python", "/usr/bin/python3")
        .getOrCreate()
    

4. 确保自定义NER模型的全局可访问性

  • 自定义模型需放置在所有节点的相同本地路径,或上传至GCS存储,代码中直接指定GCS路径(如 gs://your-bucket/models/your-ner-model),Spark会自动同步到各节点。
  • 先单独测试模型加载:在Jupyter中执行 spacy.load("your-model-path"),确认无报错后再集成到Spark UDF中。

5. 修复Jupyter Workbench的环境隔离问题

  • Dataproc的Jupyter Workbench可能使用独立环境,与集群默认环境不共享。执行 !pip install spacy==3.2.1 --user 为当前Jupyter内核安装依赖。
  • 重启Jupyter内核(而非仅重启Spark会话)后重新运行代码。

内容的提问来源于stack exchange,提问作者David Espinosa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:27:31