使用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
EXPERTE
gefragt vor 5 Monaten41 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen