以较大的组读取输入文件 - Amazon Glue
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

以较大的组读取输入文件

您可以设置表的属性,以使 Amazon Glue ETL 任务能够在从 Amazon S3 数据存储中读取文件时对文件分组。这些属性使每个 ETL 任务可将一组输入文件读取到单个内存分区中,当 Amazon S3 数据存储中存在大量小型文件时,此功能特别有用。当您设置某些属性时,您会指示 Amazon Glue 对 Amazon S3 数据分区中的文件分组并设置要读取的组的大小。您还可以在从 Amazon S3 数据存储中读取时用 create_dynamic_frame.from_options 方法设置这些选项。

要对表启用文件分组,可在表结构的参数字段中设置键值对。使用 JSON 表示法为表的参数字段设置值。有关编辑表属性的更多信息,请参阅 查看和编辑表详细信息

您可以使用此方法对数据目录中使用 Amazon S3 数据存储的表启用分组。

groupFiles

groupFiles 设置为 inPartition,以在 Amazon S3 数据分区中启用文件分组。如果输入文件数多于 50000 个,Amazon Glue 会自动启用分组,如以下示例中所示。

'groupFiles': 'inPartition'
groupSize

groupSize 设置为组的目标大小 (以字节为单位)。groupSize 属性为可选属性,如果未提供,Amazon Glue 将计算一个大小以使用集群中的所有 CPU 内核,同时仍会减少 ETL 任务和内存分区总数。

例如,以下内容将组大小设置为 1 MB。

'groupSize': '1048576'

请注意,应使用计算的结果设置 groupsize。例如,1024 * 1024 = 1048576。

recurse

递归设置为 True,这样在将 paths 指定为路径数组时,会以递归方式读取所有子目录中的文件。如果 paths 是 Amazon S3 中的一组对象密钥,或者输入格式为 parquet/orc,您不需要将其设置为 recurse,如以下示例所示。

'recurse':True

如果您使用 create_dynamic_frame.from_options 方法直接从 Amazon S3 中读取,请添加这些连接选项。例如,下面尝试将文件分组到 1 MB 组中。

df = glueContext.create_dynamic_frame.from_options("s3", {'paths': ["s3://s3path/"], 'recurse':True, 'groupFiles': 'inPartition', 'groupSize': '1048576'}, format="json")
注意

从以下数据格式创建的 DynamicFrames 支持 groupFiles:csv、ion、grokLog、json 和 xml。avro、parquet 和 orc 不支持此选项。