如何使用AWS Glue从S3存储桶合并CSV文件并将其保存回S3

时间:2020-09-10 10:32:27

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

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

我已经尝试过的:

我创建了一个CSV分类器。 我创建了一个搜寻器,用于扫描S3存储桶中的数据。 我被困住的地方:

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

有什么方法可以实现目标而无需使用任何其他数据库系统,仅使用S3,Glue?

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

enter image description here

分界符为“;”的分类器

enter image description here

搜寻器配置

enter image description here

搜寻器结果(未检测到架构)

enter image description here

1 个答案:

答案 0 :(得分:0)

由于源文件中存在的行数,Glue搜寻器检测到架构的原因是未知的。请参阅您的案例中使用的doc中的内置CSV分类器部分。

根据要归类为CSV的文档,表架构必须至少具有两列和两行数据。

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

1。创建一个动态框架并将spearator传递为;在format_options中。以下是示例,您可以根据需要进行修改。

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。