使用Glue Studio加载数据到DynamoDB时, 报错: Provided list of item keys contains duplicates

0

【以下的问题经过翻译处理】 我要将存储在 S3 上的包含一些邮政编码(大约 200000)的CSV文件加载到 DynamoDB 表中。我遵循两种方法,一种基于 Lambda,一种基于 Glue Studio。

Glue Studio 案例中,可视化的ETL图表非常简单,就两个节点,其中第一个节点从 S3 加载数据,第二个节点指定写入选项到自定义节点;primary key 是邮政编码,没有sorting key。代码如下:

glueContext.write_dynamic_frame_from_options( frame=dfc, connection_type="dynamodb", connection_options={ "dynamodb.output.tableName": "postalCodes" } )

在插入前 50 个条目后,运行会失败,并出现错误:Provided list of item keys contains duplicates。但是实际上,原始列表不包含任何重复项。

这是什么原因.

profile picture
专家
已提问 6 个月前42 查看次数
1 回答
0

【以下的回答经过翻译处理】 Glue与DynamoDB的连接 是通过基于DynamoDB的“BatchWriteItems” API来实现的,其中它以每个请求 25 个Item 的形式批量写入。由于您使用“postal_code”作为partition key,如果一批 25 个Item中的两个Item 包含相同的“postal_code”,那么您将收到此异常。

在写入DynamoDB之前,您可以将 DynamicFrame 转换为 Dataframe 并在 postal_code 列上调用 distinct 或 dropDuplicates。然后您必须转换回 DynamicFrame 以将 DynamoDB 用作接收器。

df
  .select("postal_code")
  .distinct
  .withColumn("postal_code","other", "other1"))
  .show()

另一件值得检查的事情是您没有读取 CSV 标头,这也可能是同一批次中出现重复项的原因。您可以在使用以下 [param](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format.html#aws-glue-编程-etl-格式-csv):

'withHeader': False

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则