[英]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.