【问题标题】:How to merge CSV file from S3 bucket and save it back into S3 using AWS Glue如何从 S3 存储桶合并 CSV 文件并使用 AWS Glue 将其保存回 S3
【发布时间】:2020-12-28 20:10:03
【问题描述】:

目标是将数据(csv 文件)从一个 S3 存储桶转换到另一个 S3 存储桶 - 使用 Glue。

我已经尝试过的:

我创建了一个 CSV 分类器。 我创建了一个爬虫来扫描 S3 存储桶中的数据。 我被困在哪里:

无法找到如何在不将其保存在任何 RDS 或其他数据库服务中的情况下再次将输出存储在 S3 中。 因为 Glue 输出要求数据库输出,我没有也不想使用。

有什么方法可以在不使用任何其他数据库系统的情况下实现目标,只是简单的 - S3、Glue?

更多信息 示例单个 CSV 文件,我正在尝试合并

分隔符为“;”的分类器

爬虫配置

爬虫结果(未检测到架构)

【问题讨论】:

  • 源 CSV 文件中有多少行?
  • @PrabhakarReddy 我在每个文件中有 1 行。我的目标是合并所有这些单行文件并创建一个合并文件(添加标题后)。

标签: amazon-web-services amazon-s3 aws-glue aws-glue-data-catalog aws-glue-spark


【解决方案1】:

Glue 爬虫检测到架构的原因是 UNKNOWN,因为源文件中存在的行数。请参阅您正在使用的 doc 中的内置 CSV 分类器部分。

根据要归类为CSV的doc,table schema必须至少有两列两行数据。

在您的情况下,您可以使用 AWS Glue 作业并使用以下任一方式直接从 S3 读取文件:

1.创建一个动态帧并将spearator作为;在格式选项中。以下是示例,您可以根据需要进行修改。

dyF = GlueContext.create_dynamic_frame_from_options(connection_type="s3",connection_options = {"paths": [InputDir]},format="csv",format_options={"withHeader": True,"separator": ";","quoteChar": '"',"escaper": '"'},transformation_ctx = "taxidata")

2.如果您想利用 Glue 原生转换,请使用 spark 数据帧从 S3 读取数据,然后将其转换回动态帧:

df = spark.read.options(delimiter=';').csv("s3://path-to-files/")

如果您想合并具有不同架构的文件,则将包含不同架构的数据读取到您选择的不同框架中,然后使用 Join 运算符将它们合并。

请参阅this,其中包含连接并将数据写回 s3 的示例代码。

【讨论】:

  • 我需要在哪里编写这段代码?它应该在 AWS Glue 仪表板中吗?
  • 谢谢,现在就完成。但是你相信用例是可能的吗?在 S3 存储桶上运行 Glue 作业,然后合并文件并保存到另一个存储桶中?无需使用任何其他服务,只需 Glue。
猜你喜欢
  • 2020-12-27
  • 2022-11-23
  • 1970-01-01
  • 2019-11-25
  • 2021-01-31
  • 1970-01-01
  • 2018-10-25
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多