AWS Glue Python作业写入Delta Lake报错:找不到spark_catalog插件类
解决AWS Glue作业写入Delta Lake的配置错误
错误原因
你添加的spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog配置与AWS Glue默认Catalog冲突。Glue默认使用HiveCatalog作为spark_catalog,强行替换为DeltaCatalog会导致Glue无法找到对应类,从而抛出Cannot find catalog plugin class错误。
解决方案
1. 修改作业参数
调整高级属性中的作业参数,移除DeltaCatalog的配置,保留必要的Delta扩展和兼容配置:
- --conf:
spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension --conf spark.databricks.delta.formatCheck.enabled=false - --packages:保持
io.delta:delta-core_2.12:2.1.0(注意:若你的Glue版本是3.0,需改为io.delta:delta-core_2.12:1.2.1,因为Glue 3.0对应Spark 3.1,Delta 1.2.1为兼容版本)
2. 代码验证与优化
你的作业代码逻辑本身无问题,调整配置后即可重新运行。若需优化,可使用Glue专用的Delta Lake Sink,示例如下:
# 替换原有的DataFrame write部分 additional_options = { "path": delta_table_path, "write.parquet.compression-codec": "snappy", "mergeSchema": "true", } glueContext.write_dynamic_frame.from_options( frame=S3bucket_node1, connection_type="s3", format="delta", connection_options=additional_options, transformation_ctx="sink_to_delta_lake", )
关键说明
- 不要修改Glue默认的
spark_catalog,Delta Lake在Glue环境中无需替换默认Catalog即可正常使用。 spark.databricks.delta.formatCheck.enabled=false用于关闭Delta的格式检查,避免Glue环境中的兼容性问题。
内容的提问来源于stack exchange,提问作者Hongbo Miao
相关产品推荐
相关产品推荐

