在 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 文件的 bzipgzip 存档。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。

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

Read Write 流式传输读取 对小文件进行分组 作业书签
支持 支持 支持 不支持 支持*

* 在 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 映射参数传递给它。