本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon Glue 中使用 Avro 格式
Amazon Glue 从源中检索数据,并将数据写入以各种数据格式存储和传输的目标。如果您的数据以 Avro 数据格式存储或传输,本文档将向您介绍供您使用 Amazon Glue 中的数据的可用功能。
Amazon Glue 支持使用 Avro 格式。此格式是一种以性能为导向、基于行的数据格式。有关标准颁发机构对此格式的简介,请参阅 Apache Avro 1.8.2 Documentation
您可以使用 Amazon Glue 从 Amazon S3 和流式传输源读取 Avro 文件,以及将 Avro 文件写入 Amazon S3。您可以读取并写入包含 S3 中的 Avro 文件的 bzip2
和 gzip
存档。此外,您还可以编写包含 Avro 文件的 deflate
、snappy
和 xz
存档。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。
下表显示了支持 Avro 格式选项的常用 Amazon Glue 功能。
读取 | 写入 | 流式处理读取 | 对小文件进行分组 | 作业书签 |
---|---|---|---|---|
支持 | 支持 | 支持* | 不支持 | 支持 |
*受支持,但有限制。有关更多信息,请参阅 Avro 串流源的注释和限制。
示例:从 S3 读取 Avro 文件或文件夹
先决条件:需要待读取的 Avro 文件或文件夹的 S3 路径 (s3path
)。
配置:在函数选项中,请指定 format="avro"
。在您的 connection_options
中,请使用 paths
键指定 s3path
。您可以在 connection_options
中配置读取器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue:Amazon S3 连接选项参考 中的“Data format options for ETL inputs and outputs”(ETL 输入和输出的数据格式选项)。您可以配置读取器解释 format_options
中的 Avro 文件的方式。有关详细信息,请参阅 Avro Configuration Reference(Avro 配置参考)。
以下 Amazon Glue ETL 脚本显示了从 S3 读取 Avro 文件或文件夹的过程:
示例:将 Avro 文件和文件夹写入 Amazon S3
先决条件:您将需要一个初始化的 DataFrame(dataFrame
)或 DynamicFrame(dynamicFrame
)。您还需要预期 S3 输出路径 s3path
。
配置:在函数选项中,请指定 format="avro"
。在您的 connection_options
中,请使用 paths
键指定 s3path
。您可以在 connection_options
中进一步修改编写器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue:Amazon S3 连接选项参考 中的“Data format options for ETL inputs and outputs”(ETL 输入和输出的数据格式选项)。您可以改变写入器在 format_options
中解释 Avro 文件的方式。有关详细信息,请参阅 Avro Configuration Reference(Avro 配置参考)。
以下 Amazon Glue ETL 脚本显示了将 Avro 文件或文件夹写入 Amazon S3 的过程。
Avro 配置参考
您可以在 Amazon Glue 库指定 format="avro"
的任何位置使用以下 format_options
值:
version
– 指定要支持的 Apache Avro 读取器/写入器格式的版本。默认值为“1.7”。您可以指定format_options={"version": “1.8”}
以启用 Avro 逻辑类型读取和写入。有关更多信息,请参阅 Apache Avro 1.7.7 规范和 Apache Avro 1.8.2 规范 。 Apache Avro 1.8 连接器支持以下逻辑类型转换:
对于读取器:此表显示 Avro 数据类型(逻辑类型和 Avro 基元类型)与 Avro 阅读器 1.7 和 1.8 的 Amazon Glue DynamicFrame
数据类型之间的转换。
Avro 数据类型: 逻辑类型 |
Avro 数据类型: Avro 基元类型 |
GlueDynamicFrame 数据类型: Avro 读取器 1.7 |
GlueDynamicFrame 数据类型: Avro 读取器 1.8 |
---|---|---|---|
十进制 | bytes | BINARY | 十进制 |
十进制 | 固定 | BINARY | 十进制 |
Date | int | INT | Date |
时间(毫秒) | int | INT | INT |
时间(微秒) | long | LONG | LONG |
时间戳(毫秒) | long | LONG | Timestamp |
时间戳(微秒) | long | LONG | LONG |
持续时间(不是逻辑类型) | 固定为 12 | BINARY | BINARY |
对于写入器:此表显示 Avro 写入器 1.7 和 1.8 在 Amazon Glue DynamicFrame
数据类型与 Avro 数据类型之间的转换。
Amazon Glue DynamicFrame 数据类型 |
Avro 数据类型: Avro 写入器 1.7 |
Avro 数据类型: Avro 写入器 1.8 |
---|---|---|
十进制 | String | decimal |
Date | String | date |
Timestamp | String | timestamp-micros |
Avro Spark DataFrame 支持
要使用 Spark DataFrame API 中的 Avro,您需要为相应的 Spark 版本安装 Spark Avro 插件。任务中可用的 Spark 版本取决于您的 Amazon Glue 版本。有关 Spark 版本的更多信息,请参阅 Amazon Glue 版本。该插件由 Apache 维护,我们不提供具体的支持保证。
在 Amazon Glue 2.0 中 – 使用 2.4.3 版本的 Spark Avro 插件。您可以在 Maven Central 上找到该 JAR,请参阅 org.apache.spark:spark-avro_2.12:2.4.3
在 Amazon Glue 3.0 中 – 使用3.1.1 版本的 Spark Avro 插件。您可以在 Maven Central 上找到该 JAR,请参阅 org.apache.spark:spark-avro_2.12:3.1.1
要在 Amazon Glue ETL 任务中加入额外的 JAR,请使用 --extra-jars
任务参数。有关任务参数的更多信息,请参阅 在 Amazon Glue 作业中使用作业参数。您也可以在 Amazon Web Services Management Console 中配置此参数。