在 AWS Glue 中使用 ORC 格式 - AWS Glue

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

在 AWS Glue 中使用 ORC 格式

AWS Glue 會從各來源擷取資料,並將資料寫入以各種資料格式儲存和傳輸的目標。如果您的資料以 ORC 資料格式存放或傳輸,本文件將向您介紹在 AWS Glue 中使用資料的可用功能。

AWS Glue 支援使用 ORC 格式。此格式是效能導向、以資料行為基礎的資料格式。如需標準授權單位的格式簡介,請參閱 Apache Orc

您可以使用 AWS Glue 從 Amazon S3 和串流來源讀取 ORC 檔案,並將 ORC 檔案寫入 Amazon S3。您可以讀取和寫入來自 S3 的包含 ORC 檔案的 bzipgzip 封存。您可以在 S3 連線參數 上設定壓縮行為,而不是在本頁討論的組態中設定。

下表顯示支援 ORC 格式選項的常見 AWS Glue 操作。

讀取 寫入 串流讀取 對小型檔案進行分組 任務書籤
支援 支援 支援 不支援 支援*

* 在 AWS Glue 1.0 或更新版本中支援

範例:從 S3 讀取 ORC 檔案或資料夾

先決條件:您需要指向希望讀取的 ORC 檔案或資料夾的 S3 路徑 (s3path)。

組態:在您的函數選項中,指定 format="orc"。在您的 connection_options 中,使用 paths 索引鍵指定 s3path。您可以在 connection_options 中設定讀取器與 S3 的互動方式。如需詳細資訊,請參閱 AWS Glue 中 ETL 的連線類型和選項:Amazon S3 連線選項參考

以下 AWS Glue ETL 指令碼顯示從 S3 讀取 ORC 檔案或資料夾的流程:

Python

在此範例中,使用 create_dynamic_frame.from_options 方法。

from pyspark.context import SparkContext from awsglue.context import GlueContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://s3path"]}, format="orc" )

您也可以在指令碼中使用 DataFrames (pyspark.sql.DataFrame)。

dataFrame = spark.read\ .orc("s3://s3path")
Scala

在此範例中,使用 getSourceWithFormat 操作。

import com.amazonaws.services.glue.util.JsonOptions import com.amazonaws.services.glue.GlueContext import org.apache.spark.sql.SparkContext object GlueApp { def main(sysArgs: Array[String]): Unit = { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) val dynamicFrame = glueContext.getSourceWithFormat( connectionType="s3", format="orc", options=JsonOptions("""{"paths": ["s3://s3path"]}""") ).getDynamicFrame() } }

您也可以在指令碼中使用 DataFrames (pyspark.sql.DataFrame)。

val dataFrame = spark.read .orc("s3://s3path")

範例:將 ORC 檔案和資料夾寫入 S3

先決條件:您需要初始化 DataFrame (dataFrame) 或 DynamicFrame (dynamicFrame)。您還需要預期的 S3 輸出路徑 s3path

組態:在您的函數選項中,指定 format="orc"。在您的連線選項中,使用 paths 鍵指定 s3path。您可以在 connection_options 中進一步更改寫入器與 S3 的互動方式。如需詳細資訊,請參閱 AWS Glue:Amazon S3 連線選項參考 中 ​ETL 輸入與輸出的資料格式選項。下列程式碼範例顯示了此程序:

Python

在此範例中,使用 write_dynamic_frame.from_options 方法。

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="orc", connection_options={ "path": "s3://s3path" } )

您也可以在指令碼中使用 DataFrames (pyspark.sql.DataFrame)。

df.write.orc("s3://s3path/")
Scala

在此範例中,使用 getSinkWithFormat 方法。

import com.amazonaws.services.glue.util.JsonOptions import com.amazonaws.services.glue.{DynamicFrame, GlueContext} import org.apache.spark.SparkContext object GlueApp { def main(sysArgs: Array[String]): Unit = { val spark: SparkContext = new SparkContext() val glueContext: GlueContext = new GlueContext(spark) glueContext.getSinkWithFormat( connectionType="s3", options=JsonOptions("""{"path": "s3://s3path"}"""), format="orc" ).writeDynamicFrame(dynamicFrame) } }

您也可以在指令碼中使用 DataFrames (pyspark.sql.DataFrame)。

df.write.orc("s3://s3path/")

ORC 組態參考

format="orc"format_options 值。不過任何底層的 SparkSQL 程式碼所接受的選項均可透過 connection_options 對應參數傳送。