本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Glue 會從各來源擷取資料,並將資料寫入以各種資料格式儲存和傳輸的目標。如果您的資料以 ORC 資料格式存放或傳輸,本文件將向您介紹在 AWS Glue 中使用資料的可用功能。
AWS Glue 支援使用 ORC 格式。此格式是效能導向、以資料行為基礎的資料格式。如需標準授權單位的格式簡介,請參閱 Apache Orc。
您可以使用 AWS Glue 從 Amazon S3 和串流來源讀取 ORC 檔案,並將 ORC 檔案寫入 Amazon S3。您可以讀取和寫入來自 S3 的包含 ORC 檔案的 bzip
和 gzip
封存。您可以在 S3 連線參數 上設定壓縮行為,而不是在本頁討論的組態中設定。
下表顯示支援 ORC 格式選項的常見 AWS Glue 操作。
讀取 |
寫入 |
串流讀取 |
對小型檔案進行分組 |
任務書籤 |
支援 |
支援 |
支援 |
不支援 |
支援* |
* 在 AWS Glue 1.0 或更新版本中支援
先決條件:您需要指向希望讀取的 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
")
先決條件:您需要初始化 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
/")
無 format="orc"
的 format_options
值。不過任何底層的 SparkSQL 程式碼所接受的選項均可透過 connection_options
對應參數傳送。