View a markdown version of this page

在 Amazon Glue 中使用 ORC 格式 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

在 Amazon Glue 中使用 ORC 格式

Amazon Glue 从源中检索数据,并将数据写入以各种数据格式存储和传输的目标。如果数据以 ORC 数据格式存储或传输,本文档将向您介绍在 Amazon Glue 中使用数据时可用的功能。

Amazon Glue 支持使用 ORC 格式。此格式是一种以性能为导向、基于列的数据格式。有关标准颁发机构对该格式的简介,请参阅 Apache Orc。

您可以使用 Amazon Glue 从 Amazon S3 和流式传输源读取 ORC 文件,以及将 ORC 文件写入 Amazon S3。您可以读取并写入包含 S3 中的 ORC 文件的 bzip 和 gzip 存档。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。

下表展示了支持 ORC 格式选项的常见 Amazon Glue 操作。

读取 写入 流式处理读取 对小文件进行分组 作业书签
支持 支持 支持 不支持 支持*

* 在 Amazon Glue 1.0 以上版本中受支持

示例:从 S3 读取 ORC 文件或文件夹

先决条件:需要待读取的 ORC 文件或文件夹的 S3 路径 (s3path)。

配置:在函数选项中,请指定 format="orc"。在您的 connection_options 中,请使用 paths 键指定 s3path。您可以在 connection_options 中配置读取器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue 中 ETL 的连接类型和选项:Amazon S3 连接选项参考。

以下 Amazon 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" )

您还可以使用脚本(pyspark.sql.DataFrame)中的 DataFrames。

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() } }

您还可以使用脚本(pyspark.sql.DataFrame)中的 DataFrames。

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

示例:将 ORC 文件和文件夹写入 S3

先决条件:您将需要一个初始化的 DataFrame(dataFrame)或 DynamicFrame(dynamicFrame)。您还需要预期 S3 输出路径 s3path。

配置:在函数选项中,请指定 format="orc"。在连接选项中,使用 paths 密钥指定 s3path。您可以在 connection_options 中进一步修改编写器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue:Amazon S3 连接选项参考 中的“Data format options for ETL inputs and outputs”(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" } )

您还可以使用脚本(pyspark.sql.DataFrame)中的 DataFrames。

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) } }

您还可以使用脚本(pyspark.sql.DataFrame)中的 DataFrames。

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

ORC 配置参考

没有适用于 format="orc" 的 format_options 值。不过,基础 SparkSQL 代码所接受的任何选项均可通过 connection_options 映射参数传递给它。