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

AWS Glue 3.0环境导入PyDeequ包失败问题求助

AWS Glue中PyDeequ导入失败的解决方法

问题根源

错误出在PyDeequ自动检测Spark版本的逻辑上:PyDeequ通过执行命令获取Spark版本,但Glue的Spark环境输出格式不符合预期,导致拆分结果列表后触发IndexError索引越界。

核心修复步骤

  • 调整导入顺序:必须先初始化Glue的Spark环境,再导入PyDeequ,避免在无Spark上下文的情况下触发版本检测。
  • 手动指定Deequ依赖版本:根据Glue绑定的Spark版本,直接配置对应的Deequ Maven坐标,跳过自动检测逻辑。
  • 使用Glue原生SparkSession:不要手动创建SparkSession,直接复用GlueContext提供的会话,避免环境冲突。

修改后的完整脚本

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
import findspark
findspark.init()

# 先初始化Glue环境
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# 手动指定Deequ版本(根据你的Glue Spark版本调整)
# Glue 3.0对应Spark 3.1.1 → 使用Deequ 2.0.0-spark-3.1
spark.conf.set("spark.jars.packages", "com.amazon.deequ:deequ:2.0.0-spark-3.1")
spark.conf.set("spark.jars.excludes", "net.sourceforge.f2j:arpack_combined_all")

# 环境初始化完成后再导入PyDeequ
import pydeequ
from pydeequ.analyzers import *

# 后续添加你的PyDeequ校验逻辑示例:
# df = glueContext.create_dynamic_frame.from_catalog(database="your_db", table_name="your_table").toDF()
# analysis_result = AnalysisRunner(spark).onData(df).addAnalyzer(Count()).run()

关键注意事项

  1. 版本匹配规则:确保Deequ版本与Glue的Spark版本严格对应:

    • Glue 2.0(Spark 2.4.3)→ Deequ 1.0.4-spark-2.4
    • Glue 3.0(Spark 3.1.1)→ Deequ 2.0.0-spark-3.1
    • Glue 4.0(Spark 3.3.0)→ Deequ 2.0.1-spark-3.3
  2. 依赖配置优化:无需手动上传JAR到Glue的Dependent JARs路径,通过spark.jars.packages会自动拉取对应依赖,避免版本冲突。

  3. 初始化顺序强制要求:必须先完成GlueContext和SparkSession的初始化,再导入PyDeequ,确保PyDeequ能正确识别现有Spark环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:20:38