本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Glue 從來源擷取資料,並將資料寫入以各種資料格式存放和傳輸的目標。如果您的資料是以 Parquet 資料格式存放或傳輸,本文件會介紹在 Glue AWS 中使用資料的可用功能。
AWS Glue 支援使用 Parquet 格式。此格式是效能導向、以資料行為基礎的資料格式。如需標準授權單位的格式簡介,請參閱 Apache Parquet Documentation Overview
您可以使用 AWS Glue 從 Amazon S3 和串流來源讀取 Parquet 檔案,以及將 Parquet 檔案寫入 Amazon S3。您可以從 S3 讀取和寫入包含 Parquet 檔案的 bzip
和 gzip
封存檔。您可以在 S3 連線參數 上設定壓縮行為,而不是在本頁討論的組態中設定。
下表顯示哪些常見的 AWS Glue 功能支援 Parquet 格式選項。
讀取 | 寫入 | 串流讀取 | 對小型檔案進行分組 | 任務書籤 |
---|---|---|---|---|
支援 | 支援 | 支援 | 不支援 | 支援* |
* Glue AWS 1.0+ 版支援
範例:從 S3 讀取 Parquet 檔案或資料夾
先決條件:您需要指向希望讀取的 Parquet 檔案或資料夾的 S3 路徑 (s3path
)。
組態:在您的函數選項中,指定 format="parquet"
。在您的 connection_options
中,使用 paths
索引鍵指定 s3path
。
您可以在 connection_options
中設定讀取器與 S3 的互動方式。如需詳細資訊,請參閱 Glue 中 ETL AWS 的連線類型和選項:S3 連線參數。
您可以在 format_options
中設定讀取器解譯 Parquet 檔案的方式。如需詳細資訊,請參閱 Parquet 組態參考。
下列 AWS Glue ETL 指令碼顯示從 S3 讀取 Parquet 檔案或資料夾的程序:
在此範例中,使用 create_dynamic_frame.from_options 方法。
# Example: Read Parquet from S3
from pyspark.context import SparkContext
from awsglue.context import GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
dynamicFrame = glueContext.create_dynamic_frame.from_options(
connection_type = "s3",
connection_options = {"paths": ["s3://s3path
/"]},
format = "parquet"
)
您也可以在指令碼中使用 DataFrames (pyspark.sql.DataFrame
)。
dataFrame = spark.read.parquet("s3://s3path
/")
範例:將 Parquet 檔案和資料夾寫入 S3
先決條件:您需要初始化 DataFrame (dataFrame
) 或 DynamicFrame (dynamicFrame
)。您還需要預期的 S3 輸出路徑 s3path
。
組態:在您的函數選項中,指定 format="parquet"
。在您的 connection_options
中,使用 paths
鍵來指定 s3path
。
您可以在 connection_options
中進一步更改寫入器與 S3 的互動方式。如需詳細資訊,請參閱 Glue 中 ETL AWS 的連線類型和選項:S3 連線參數。您可以在 format_options
中設定操作如何寫入檔案內容。如需詳細資訊,請參閱 Parquet 組態參考。
下列 AWS Glue ETL 指令碼顯示將 Parquet 檔案和資料夾寫入 S3 的程序。
我們透過 useGlueParquetWriter
組態鍵為自訂 Parquet 寫入器提供 DynamicFrames 的效能最佳化。若要判斷此寫入器是否適合您的工作負載,請參閱 Glue Parquet 寫入器。
在此範例中,使用 write_dynamic_frame.from_options 方法。
# Example: Write Parquet to S3
# Consider whether useGlueParquetWriter is right for your workflow.
from pyspark.context import SparkContext
from awsglue.context import GlueContext
sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
glueContext.write_dynamic_frame.from_options(
frame=dynamicFrame,
connection_type="s3",
format="parquet",
connection_options={
"path": "s3://s3path
",
},
format_options={
# "useGlueParquetWriter": True,
},
)
您也可以在指令碼中使用 DataFrames (pyspark.sql.DataFrame
)。
df.write.parquet("s3://s3path
/")
Parquet 組態參考
無論 format_options
Glue AWS 程式庫在何處指定 ,您都可以使用下列項目format="parquet"
:
-
useGlueParquetWriter
– 指定使用具有 DynamicFrame 工作流程效能最佳化的自訂 Parquet 寫入器。如需用量詳細資訊,請參閱 Glue Parquet 寫入器。-
類型:布林值,預設:
false
-
-
compression
– 指定使用的壓縮轉碼器。值與org.apache.parquet.hadoop.metadata.CompressionCodecName
完全相容。-
類型:列舉文字,預設:
"snappy"
-
值:
"uncompressed"
、"snappy"
、"gzip"
和"lzo"
-
-
blockSize
– 指定記憶體中將緩衝處理資料列群組的大小,以位元組為單位。您可以使用該值來調校效能。大小應完全分為多個 MB 單位。-
類型:數值,預設:
134217728
-
預設值等於 128 MB。
-
-
pageSize
– 指定分頁的大小,以位元組為單位。您可以使用該值來調校效能。分頁是必須完整讀取才能存取單一記錄之最小單位。-
類型:數值,預設:
1048576
-
預設值等於 1 MB。
-
注意
此外,任何底層的 SparkSQL 程式碼所接受的選項均可透過 connection_options
對應參數傳送。例如,可為 AWS Glue Spark 讀取器設定 mergeSchema
使用 AWS Glue Parquet 寫入器以最佳化寫入效能
注意
過去已透過glueparquet
格式類型存取 AWS Glue Parquet 寫入器。但現在不再提倡這種存取模式。請改用已啟用 useGlueParquetWriter
的 parquet
類型。
AWS Glue Parquet 寫入器具有效能增強功能,可允許更快的 Parquet 檔案寫入。傳統的寫入器會在寫入之前計算結構描述。Parquet 格式不會以可供快速擷取的方式存放結構描述,因此這可能需要一些時間。使用 AWS Glue Parquet 寫入器時,不需要預先計算的結構描述。當資料送達時,寫入器會動態地計算並修改結構描述。
指定 useGlueParquetWriter
時,請注意以下限制:
-
寫入器僅支援結構描述演變 (例如新增或移除資料行),但不會變更資料行類型,例如使用
ResolveChoice
。 -
寫入器不支援寫入空白的 DataFrame,例如,寫入只含結構描述的檔案。透過設定 AWS 與 Glue Data Catalog 整合時
enableUpdateCatalog=True
,嘗試寫入空的 DataFrame 不會更新 Data Catalog。而會在資料目錄建立不含結構描述的資料表。
如果您的轉換不需要這些限制,則開啟 AWS Glue Parquet 寫入器應可提高效能。