本地运行AWS Glue脚本时导入delta.tables报module not found错误
解决本地AWS Glue脚本导入delta.tables时报错的问题
问题根本原因
你遇到的delta.tables module not found错误主要来自两个点:
- 本地环境未安装Delta Lake的Python客户端包,仅配置Spark JAR不足以让Python识别
delta.tables模块 - 导入
delta.tables的时机早于SparkSession的Delta配置初始化,导致Python无法关联到Delta的依赖
具体修复步骤
1. 安装匹配版本的Delta Lake Python包
你的Delta JAR版本是1.0.0,需安装对应版本的Python包:
pip install delta-spark==1.0.0
2. 调整代码导入时机与配置逻辑
将delta.tables的导入延迟到SparkSession初始化完成后,同时移除代码中硬编码的JAR路径配置(改用命令行参数传入更可靠):
from pyspark.sql.session import SparkSession class DataLakeClient: def __init__(self, s3_alias, prefix): self.spark = ( SparkSession.builder .config( "spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension", ) .config( "spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog", ) .getOrCreate() ) # 延迟导入,确保Spark Delta配置生效后再加载模块 from delta.tables import * self.path = f"{s3_alias}/{prefix}/" def read_dl(self, table): return DeltaTable.forPath(self.spark, f"{self.path}/{table}").toDF()
3. 修改gluesparksubmit命令
用--jars参数明确指定Delta JAR路径,让Glue Spark环境正确加载依赖:
bash gluesparksubmit --jars /home/my_user_name/aws-glue-libs/code/libs/delta-core_2.12-1.0.0.jar /home/my_user_name/aws-glue-libs/code/script.py
额外验证点
- 确认
gluesparksubmit使用的Python环境和你安装delta-spark的环境一致(可通过gluesparksubmit --version查看关联版本) - 检查Delta JAR文件路径是否正确、文件是否有可读权限
内容的提问来源于stack exchange,提问作者marcin2x4
相关产品推荐
相关产品推荐

