AWS Glue调用XSDToSchema报错:'JavaPackage'对象不可调用
解决AWS Glue中使用XSDToSchema出现'JavaPackage' object is not callable错误
错误原因
这个错误核心原因是AWS Glue运行环境未包含databricks spark-xml依赖包,或依赖包版本与Glue内置的Spark版本不兼容。本地运行正常是因为你已手动配置好对应依赖,而Glue默认不预装该库。
解决方案
1. 匹配兼容的依赖版本
根据Glue版本选择对应spark-xml包:
- Glue 3.0(基于Spark 3.1):使用
com.databricks:spark-xml_2.12:0.15.0 - Glue 4.0(基于Spark 3.3):使用
com.databricks:spark-xml_2.12:0.16.0
2. 在Glue作业中添加依赖
有两种常用方式引入依赖:
方式一:通过作业参数指定Extra JARs
- 将对应版本的spark-xml jar包上传到S3存储桶(示例路径:
s3://your-glue-deps/spark-xml_2.12-0.15.0.jar) - 编辑Glue作业,在"作业参数"中添加键值对:
- 键:
--extra-jars - 值:
s3://your-glue-deps/spark-xml_2.12-0.15.0.jar
- 键:
- 将对应版本的spark-xml jar包上传到S3存储桶(示例路径:
方式二:通过Maven坐标添加依赖
编辑Glue作业,在"依赖项"->"Python库路径或Maven坐标"中输入对应Maven坐标,比如com.databricks:spark-xml_2.12:0.15.0
3. 调整XSD文件读取逻辑
Glue作业的本地文件系统为临时环境,直接用open读取本地文件会找不到路径,需改为从S3读取:
import boto3 # 从S3读取XSD内容 s3_client = boto3.client('s3') xsd_obj = s3_client.get_object(Bucket='your-bucket', Key='path/to/example_xsd.xsd') xml_schema = xsd_obj['Body'].read().decode('utf-8') # 调用XSDToSchema生成Schema a = spark._jvm.com.databricks.spark.xml.util.XSDToSchema.read(xml_schema)
4. 验证依赖加载状态
可先打印类信息确认依赖是否加载成功:
print(spark._jvm.com.databricks.spark.xml.util.XSDToSchema)
若输出为class com.databricks.spark.xml.util.XSDToSchema说明加载成功;若仍显示JavaPackage,需检查依赖路径或版本是否匹配。
内容的提问来源于stack exchange,提问作者The Vinh
相关产品推荐
相关产品推荐

