使用AWS Glue Job迁移DynamoDB时整数变为Null的问题求助
问题根因
源DynamoDB的amount字段为N类型,存储的整数会被AWS Glue解析为int类型,而你当前的ApplyMapping配置强制指定源类型为double,类型不匹配导致Glue无法识别这些整数记录,最终转为Null;小数会被解析为double类型,因此能正常映射。
解决方案
方案1:修改ApplyMapping的源类型为numeric
DynamoDB的N类型对应Glue的numeric类型,可同时兼容整数和小数。调整后的配置如下:
frame=AWSGlueDataCatalog_node16, mappings=[ ("amount", "numeric", "amount", "double") ], transformation_ctx="ChangeSchemaApplyMapping_node12"
方案2:自定义类型转换逻辑(更灵活)
如果方案1未解决问题,可在读取源数据后,通过Spark函数统一将amount字段转为double类型,再执行后续映射或写入操作:
from pyspark.sql.functions import col, cast # 读取源表数据后,先处理amount字段 processed_frame = frame.withColumn("amount", col("amount").cast("double")) # 后续可直接用processed_frame执行写入目标DynamoDB的操作,或继续参与ApplyMapping流程
验证步骤
- 调整配置后运行测试Job,抽取部分包含整数和小数的样本数据
- 检查目标DynamoDB表中
amount字段的数值是否完整,整数不再为Null,小数保持正确精度
内容的提问来源于stack exchange,提问作者cp0202
相关产品推荐
相关产品推荐

