[英]AWS Glue Job - CSV to Parquet. How to ignore header?
我需要将一堆 (23) 个 CSV 个文件(源 s3)转换为镶木地板格式。 输入 CSV 包含所有文件中的标题。 当我使用 Glue 生成代码时。 output 包含 22 行 header 行,它们也在不同的行中,这意味着它忽略了第一个 header。在执行此转换时,我需要帮助来忽略所有标头。
由于我使用from_catalog
function 作为输入,因此我没有任何format_options
来忽略 header 行。
另外,我可以在 Glue 表中设置一个选项,即文件中存在 header 吗? 当我的工作运行时,它会自动忽略 header 吗?
我目前的部分方法如下。 我是胶水的新手。 这段代码实际上是由 Glue 自动生成的。
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "my_datalake", table_name = "my-csv-files", transformation_ctx = "datasource0")
datasink1 = glueContext.write_dynamic_frame.from_options(frame = datasource0, connection_type = "s3", connection_options = {"path": "s3://my-bucket-name/full/s3/path-parquet"}, format = "parquet", transformation_ctx = "datasink1")
在处理使用 AWS Glue 的 ETL 作业时遇到了确切的问题。
from_catalog
的文档说:
- additional_options – 可选名称-值对的集合。 可能的选项包括 AWS Glue 中 ETL 的连接类型和选项中列出的选项,endpointUrl、streamName、bootstrap.servers、security.protocol、topicName、分类和分隔符除外。
我尝试使用下面的代码片段及其与 from_catalog 的一些排列。 但对我没有任何帮助。
additional_options = {"format": "csv", "format_options": '{"withHeader": "True"}'},
go 解决此问题的一种方法是使用from_options
而不是from_catalog
并直接指向 S3 存储桶或文件夹。 它应该是这样的:
datasource0 = glueContext.create_dynamic_frame.from_options(
connection_type="s3",
connection_options={
'paths': ['s3://bucket_name/folder_name'],
"recurse": True,
'groupFiles': 'inPartition'
},
format="csv",
format_options={
"withHeader": True
},
transformation_ctx = "datasource0"
)
但是,如果您出于任何原因不能这样做并且想坚持使用from_catalog
,那么使用适合我的过滤器。
假设您的标头名称之一是name
,代码段可能如下所示:
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "my_datalake", table_name = "my-csv-files", transformation_ctx = "datasource0")
filtered_df = Filter.apply(frame = datasource0, f = lambda x: x["name"] != "name")
不太确定 spark 的数据帧或胶水的动态帧如何处理 csv 标题以及为什么从目录中读取的数据在行和模式中都有标题,但这似乎通过从行中删除 header 值来解决我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.