讀取在大型群組中的輸入檔案 - AWS Glue

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

讀取在大型群組中的輸入檔案

您可以設定資料表的屬性,來啟用 AWS Glue ETL 任務,以讓檔案從 Amazon S3 資料存放區進行讀取時進行分組。這些屬性可讓每個 ETL 任務將一組輸入檔案輸入到單一記憶體分割區,這在 Amazon S3 資料存放區中有大量小型檔案時特別有用。在您設定特定屬性時,您會指示 AWS Glue 以在 Amazon S3 資料分割區中分組檔案並設定要讀取的群組大小。您也可以在從 Amazon S3 資料存放區讀取時,使用 create_dynamic_frame.from_options 方法設定這些選項。

若要啟用資料表分組檔案,您須在資料表結構的參數欄位中設定金鑰值對。使用 JSON 符號來設定資料表的參數欄位值。關於編輯資料表屬性的詳細資訊,請參閱 檢視和管理表格詳細資訊

您可以使用此方法,以啟用在 Data Catalog 中與 Amazon S3 資料存放區的資料表群組。

groupFiles

groupFiles 設為 inPartition,可將檔案分組在 Amazon S3 資料分割區中。如果超過 50,000 個輸入檔案,則 AWS Glue 會自動分組,如下例所示。

'groupFiles': 'inPartition'
groupSize

groupSize 設定為群組目標大小 (以位元組為單位)。groupSize 屬性是選用的,如果沒有提供,AWS Glue 會計算在叢集中使用所有 CPU 核心的大小,同時仍降低 ETL 任務的總數與記憶體內分割區。

例如,下列會將群組大小設定為 1 MB。

'groupSize': '1048576'

請注意,您應使用計算的結果來設定 groupsize。例如:1024 * 1024 = 1048576。

recurse

recurse (遞迴) 設定為 True 以在指定 paths 作為路徑陣列時,遞迴讀取所有子目錄中的檔案。如果 paths 是 Amazon S3 中的物件金鑰陣列或輸入格式為 parquet/orc,則您不需要設定遞迴,如下列範例所示。

'recurse':True

如果您直接使用 create_dynamic_frame.from_options 方法從 Amazon S3 進行讀取,則新增這些連線選項。例如,以下會嘗試將檔案分組到 1 MB 群組。

df = glueContext.create_dynamic_frame.from_options("s3", {'paths': ["s3://s3path/"], 'recurse':True, 'groupFiles': 'inPartition', 'groupSize': '1048576'}, format="json")
注意

groupFiles從以下資料格式建立的 DynamicFrames 支援:csv、ion、grokLog、json 和 xml。avro、parquet 和 orc 不支援此選項。