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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon Glue 中使用 XML 格式

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

Amazon Glue 支持使用 XML 格式。此格式表示高度可配置、严格定义的数据结构,这些数据结构不是基于行或列的。XML 是高度标准化格式。有关标准颁发机构对该格式的简介,请参阅 XML Essentials(XML 基础知识)。

您可以使用 Amazon Glue 从 Amazon S3 以及含有 XML 文件的 bzipgzip 存档中读取 XML 文件。请在 S3 连接参数 上而非本页中讨论的配置中配置压缩行为。

下表显示了哪些常用 Amazon Glue 功能支持 XML 格式选项。

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

示例:从 S3 读取 XML

XML 读取器采用 XML 标签名称。它检查输入中带有该标签的元素以推断架构,并使用相应的值填充 DynamicFrame。Amazon Glue XML 功能的行为类似于 XML Data Source for Apache Spark(Apache Spark 的 XML 数据来源)。通过将此阅读器与该项目的文档进行比较,您也许可以深入了解基本行为。

先决条件:您将需要至您想要读取的 XML 文件或文件夹以及有关您的 XML 文件的一些信息的 S3 路径(s3path)。您还需要您想要读取的 XML 元素的标签 xmlTag

配置:在函数选项中,请指定 format="xml"。在您的 connection_options 中,请使用 paths 键指定 s3path。您可以在 connection_options 中进一步配置读取器与 S3 的交互方式。有关详细信息,请参阅 Amazon Glue 中 ETL 的连接类型和选项:S3 连接参数。在您的 format_options 中,请使用 rowTag 键指定 xmlTag。您可以进一步配置读取器如何解释 format_options 中的 XML 文件。有关详细信息,请参阅 XML 配置参考

以下 Amazon Glue ETL 脚本显示了从 S3 读取 XML 文件或文件夹的过程。

Python

在本示例中,使用 create_dynamic_frame.from_options 方法。

# Example: Read XML from S3 # Set the rowTag option to configure the reader. from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) dynamicFrame = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://s3path"]}, format="xml", format_options={"rowTag": "xmlTag"}, )

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

dataFrame = spark.read\ .format("xml")\ .option("rowTag", "xmlTag")\ .load("s3://s3path")
Scala

在本示例中,使用 getSourceWithFormat 操作。

// Example: Read XML from S3 // Set the rowTag option to configure the reader. import com.amazonaws.services.glue.util.JsonOptions import com.amazonaws.services.glue.GlueContext import org.apache.spark.sql.SparkSession val glueContext = new GlueContext(SparkContext.getOrCreate()) val sparkSession: SparkSession = glueContext.getSparkSession object GlueApp { def main(sysArgs: Array[String]): Unit = { val dynamicFrame = glueContext.getSourceWithFormat( formatOptions=JsonOptions("""{"rowTag": "xmlTag"}"""), connectionType="s3", format="xml", options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""") ).getDynamicFrame() }

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

val dataFrame = spark.read .option("rowTag", "xmlTag") .format("xml") .load("s3://s3path“)

XML 配置参考

您可以在 Amazon Glue 库指定 format="xml" 的任何位置使用以下 format_options

  • rowTag – 指定文件中要视为行的 XML 标签。行标签不能自结束。

    • 类型:文本,必填项

  • encoding – 指定字符编码。它可以是由我们的运行时环境支持的字符集的名称或别名。我们没有对编码支持做出具体的保证,但主编码应该起作用。

    • 类型:文本,默认值:"UTF-8"

  • excludeAttribute – 指定是否要排除元素中的属性。

    • 类型:布尔值,默认值:false

  • treatEmptyValuesAsNulls – 指定是否将空格视为空值。

    • 类型:布尔值,默认值:false

  • attributePrefix – 用于将属性与子元素文本区分开来的属性的前缀。此前缀用于字段名称。

    • 类型:文本,默认值:"_"

  • valueTag – 在元素中具有没有子项的属性时用于值的标签。

    • 类型:文本,默认值:"_VALUE"

  • ignoreSurroundingSpaces – 指定是否应忽略值周围的空格。

    • 类型:布尔值,默认值:false

  • withSchema – 在您想要覆盖推断的架构的情况下,包含预期的架构。如果您不使用此选项,Amazon Glue 会推断 XML 数据中的架构。

    • 类型:文本,默认值:不适用

    • 该值应该是代表 StructType 的一个 JSON 对象。

手动指定 XML 架构

手动 XML 架构示例

此示例使用 withSchema 格式选项来指定 XML 数据的架构。

from awsglue.gluetypes import * schema = StructType([ Field("id", IntegerType()), Field("name", StringType()), Field("nested", StructType([ Field("x", IntegerType()), Field("y", StringType()), Field("z", ChoiceType([IntegerType(), StringType()])) ])) ]) datasource0 = create_dynamic_frame_from_options( connection_type, connection_options={"paths": ["s3://xml_bucket/someprefix"]}, format="xml", format_options={"withSchema": json.dumps(schema.jsonValue())}, transformation_ctx = "" )