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

AWS Glue迁移DynamoDB写入数字集合(NS)报ValidationException求助

问题根因

你遇到的报错是AWS Glue的DynamoDB写入连接器的类型推断逻辑缺陷导致的:连接器仅能识别由int/float类型元素组成的Python集合为DynamoDB的NS(数字集合)类型,由Decimal元素组成的集合会被判定为未知类型,序列化为空值后触发DynamoDB的ValidationException。

解决方案

方案1:快速修复(仅适合NS值全为整数的场景)

直接修改number_set函数的转换逻辑,将数值转成int类型即可兼容现有代码:

def number_set(datavalue):
    set_of_values = set()
    for value in datavalue:
        set_of_values.add(int(value))
    return set_of_values

如果你的NS存在小数,可将int替换为float,但要注意float会存在精度损失,不适合对数值精度要求高的场景。

方案2:通用高精度兼容方案(推荐,支持所有数值场景)

完全避开Glue的自动类型推断,直接使用boto3批量写入DynamoDB,该接口原生支持Decimal类型的数字集合,不需要做额外类型转换。修改后的核心代码示例:

import boto3

dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
table = dynamodb.Table(destination_table)

# 将DynamicFrame转成Python列表分批处理
records = mapped_dyF.toDF().collect()
batch_size = 25 # DynamoDB批量写入单次最多25条
for i in range(0, len(records), batch_size):
    batch = records[i:i+batch_size]
    with table.batch_writer() as writer:
        for rec in batch:
            writer.put_item(Item=rec.asDict())

该方案完全规避了Glue的类型推断问题,同时保留了Decimal的高精度特性,适合通用DynamoDB迁移场景。

内容的提问来源于stack exchange,提问作者madhu sudhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:02