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

Dataproc Serverless PySpark作业中elasticsearch模块缺失问题求助

Dataproc Serverless Spark PySpark作业elasticsearch包导入失败排查

在Dataproc Serverless Spark PySpark作业中使用elasticsearch包时,出现ModuleNotFoundError: No module named 'elasticsearch'错误,但pandas、statsmodels、numpy等其他依赖包均能正常导入。已按照Spark官方虚拟环境配置文档操作,并通过--archives参数提交作业,需要找出遗漏的配置步骤。

测试代码

import os
print("Current dir:", os.getcwd())
print("Current dir list:", os.listdir('.'))
 
import pandas
import statsmodels
import platform
import numpy
 
print("Python version:", platform.python_version())
print("Pandas version:", pandas.__version__)
print("statsmodel version:", statsmodels.__version__ )
print("Numpy version:", numpy.__version__)

from elasticsearch import Elasticsearch as es
print("elasticsearch version:", es.__version__ )

运行输出

Current dir: /tmp/srvls-batch-7554fe27-4044-4341-ae79-ffe9488ea385
Current dir list: ['pyspark_venv.tar.gz', '.test_sls.py.crc', 'test_sls.py']
Python version: 3.9.15
Pandas version: 1.4.4
statsmodel version: 0.13.5
Numpy version: 1.21.6
Traceback (most recent call last):
  File "/tmp/srvls-batch-7554fe27-4044-4341-ae79-ffe9488ea385/test_sls.py", line 16, in <module>
    from elasticsearch import Elasticsearch as es
ModuleNotFoundError: No module named 'elasticsearch'

参考文档(官方Virtualenv配置中文翻译)

使用Virtualenv打包Python依赖

  1. 创建与集群Python版本匹配的虚拟环境:
    python -m venv pyspark_venv
    source pyspark_venv/bin/activate
    
  2. 安装所需依赖包:
    pip install pandas statsmodels numpy elasticsearch
    
  3. 打包虚拟环境(确保路径正确):
    tar czf pyspark_venv.tar.gz -C pyspark_venv .
    
  4. 提交作业时指定虚拟环境配置:
    通过--archives上传打包文件,并添加Spark配置启用虚拟环境:
    gcloud dataproc batches submit pyspark test_sls.py \
        --region=你的集群区域 \
        --archives=pyspark_venv.tar.gz#environment \
        --conf spark.pyspark.virtualenv.enabled=true \
        --conf spark.pyspark.virtualenv.type=native \
        --conf spark.pyspark.virtualenv.bin.path=/opt/python3.9/bin/python
    

可能遗漏的步骤排查

  • 确认虚拟环境中elasticsearch的安装状态:重新进入虚拟环境,执行pip list查看是否存在elasticsearch包,若缺失则重新执行pip install elasticsearch并确认安装成功。
  • 检查虚拟环境打包的完整性:打包时必须使用tar czf pyspark_venv.tar.gz -C pyspark_venv .命令,避免将虚拟环境的上层目录打包进去,导致Spark无法识别包路径。
  • 验证作业提交的核心配置:提交作业时必须添加以下配置项,确保Spark启用虚拟环境:
    • --conf spark.pyspark.virtualenv.enabled=true
    • --conf spark.pyspark.virtualenv.type=native
    • 若集群Python版本有指定,需添加--conf spark.pyspark.virtualenv.bin.path=<对应Python路径>(比如输出中的3.9.15版本对应路径/opt/python3.9/bin/python)
  • 检查Python版本一致性:虚拟环境创建时使用的Python版本必须与Dataproc Serverless运行环境的Python版本(输出中为3.9.15)完全匹配,避免版本差异导致包无法被识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:30:04