如何将数据从 Glue 移动到 Dynamodb

问题描述 投票:0回答:5

我们正在为我们的一个仪表板应用程序设计一个大数据解决方案,并认真考虑将 Glue 用于我们的初始 ETL。目前 Glue 支持 JDBC 和 S3 作为目标,但我们的下游服务和组件将更好地与 dynamodb 配合使用。我们想知道最终将记录从 Glue 转移到 Dynamo 的最佳方法是什么。

我们应该先写入 S3,然后运行 lambda 将数据插入 Dynamo 吗?这是最佳实践吗?或者 我们是否应该为 Dynamodb 使用第三方 JDBC 包装器并使用 Glue 直接写入 Dynamo(不确定这是否可能,听起来有点可怕)或者 我们应该做点别的吗?

非常感谢任何帮助。谢谢!

amazon-s3 amazon-dynamodb etl aws-glue
5个回答
10
投票

您可以将以下行添加到 Glue ETL 脚本中:

    glueContext.write_dynamic_frame.from_options(frame =DynamicFrame.fromDF(df, glueContext, "final_df"), connection_type = "dynamodb", connection_options = {"tableName": "pceg_ae_test"})

df 应该是 DynamicFrame 类型


1
投票

我可以使用 boto3 进行编写...这绝对不是最好的加载方法,但它是可行的。 :)

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

print "Start testing"

for row in df1.rdd.collect():
    var1=row.sourceCid 
    print(var1) table.put_item( Item={'SOURCECID': "{}".format(var1)} )

print "End testing"

1
投票

考虑您的数据现在采用表格格式(CSV/Excel),并且数据源是 S3。然后,您可以通过以下方式将数据从 Glue 移动到 DynamoDB。

大部分工作是在 Glue 本身中完成的。

在Glue中创建一个爬虫并命名数据库,同时创建爬虫并在创建后运行该爬虫。 (这将为您提供的数据创建架构)。如果您对创建爬网程序有任何疑问,请执行以下操作:https://docs.aws.amazon.com/glue/latest/ug/tutorial-add-crawler.html#:~:text=To%20create%20a %20crawler%20那个、数据%20Crawler%20%2C%20和%20选择%20下一个.

转到 AWS Glue 左侧窗格的 ETL 部分下,单击作业。

单击创建作业,完成后,删除数据目标 - S3,因为我们希望我们的数据目标是 DynamoDB。

现在单击数据源 - S3 Bucket 并修改更改,例如添加 S3 文件位置并根据您的需要应用转换设置。输入数据输入 确保没有红色指示。

现在,您的问题的答案就在这里:转到脚本,单击编辑脚本并在现有代码中添加此函数。

glue_context.write_dynamic_frame_from_options(
 frame=<name_of_the_Dataframe>,
 connection_type="dynamodb",
 connection_options={
     "dynamodb.output.tableName": "<DynamoDB_Table_Name>",
     "dynamodb.throughput.write.percent": "1.0"
 }
)

确保您已更改:

框架= "dynamodb.output.tableName": "" DynamoDB_Table_Name - 您在 DynamoDB 中创建的表。 name_of_the_Dataframe - 这将自动生成,检查第一个函数中的变量名称。

完成上述所有步骤后,单击保存并运行脚本,并刷新 DynamoDB 表。这就是“如何”,您可以将数据从 Amazon S3 服务加载到 DynamoDB。

注意:列名称/特征名称不应首字母大写。


0
投票

实际上sivasahukar95描述的上述方法确实对我有用。但他的代码的额外优点是,它甚至能够将 parquet 文件(不是多个,而是单个 parquet 文件)从 s3 加载到 dynomoDB 中。谢谢 sivasahukar95 的帮助


-1
投票

对于您的工作负载,Amaon 实际上建议使用数据管道

它绕过了胶水。所以它主要用于将S3文件加载到Dynamo。但它可能会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.