AWS:从 Pandas 数据帧写入 DynamoDB

Posted

技术标签:

【中文标题】AWS:从 Pandas 数据帧写入 DynamoDB【英文标题】:AWS: writing from Pandas dataframe to DynamoDB 【发布时间】:2022-01-23 03:22:07 【问题描述】:

我有一个用 Python 编写的 AWS Glue 作业。其中有一个大型 Pandas 数据框 - 其中包含的数据需要写入 DynamoDB。

我目前正在使用 Glue 的“write_dynamic_frame”功能来实现这一点,因为它可以解决在短时间内写入大量数据时有时会出现“500 SlowDown”错误等问题。

它正在工作,但将数据实际写入数据库相当慢(写入 1,000 条记录需要 2 分钟以上)。

我的流程目前是这样的:

my_df = populate Pandas dataframe...
table_name = "my_dynamodb_table_name"

# Pandas -> Spark -> DynamicFrame
spark_df: DataFrame = spark.createDataFrame(my_df)
result_df: DynamicFrame = DynamicFrame.fromDF(spark_df, glue_context, "result_df")

num_partitions: int = result_df.toDF().rdd.getNumPartitions()

glue_context.write_dynamic_frame.from_options(
    frame=result_df,
    connection_type="dynamodb",
    connection_options=
        "dynamodb.output.tableName": table_name,
        "dynamodb.throughput.write.percent": "1.5",
        "dynamodb.output.retry": "30"
    
)

是否有任何一种机制可以将数据批量写入 DynamoDB?我有超过一百万条记录需要编写。

感谢您的帮助。

【问题讨论】:

您的 DynamoDB 预置写入吞吐量是多少,您正在写入的记录有多大? @Parsifal 目标表上的写入容量当前配置为 10;记录大小很小:每条记录总共不到 100 个字符。 【参考方案1】:

@Parsifal 暗示的问题与我的 DynamoDB 表的写入吞吐量有关。一旦将其更改为更合适的值,数据的摄取速度就会更快。

【讨论】:

很高兴提示足够了;今天早上我打算做数学。当您需要一次接触大量记录时,IMO Dynamo 不是一个很好的选择:每个 RCU/WCU 都很便宜,但它们加起来很快。 @Parsifal:我已转向“按需”计费模式,因为它更符合我的要求(而且更便宜)。

以上是关于AWS:从 Pandas 数据帧写入 DynamoDB的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 python pandas 数据帧导出或写入 MS Access 表

将列表写入 pandas 数据帧到 csv,从 csv 读取数据帧并再次转换为列表而无需字符串

从 Parse 迁移到 AWS Dynamo DB

高效地将大型 Pandas 数据帧读取到磁盘

将带有 timedeltas 的 pandas 数据帧写入镶木地板

扫描Dynamo DB中的特定行