

# 以较大的组读取输入文件
<a name="grouping-input-files"></a>

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

要对表启用文件分组，可在表结构的参数字段中设置键值对。使用 JSON 表示法为表的参数字段设置值。有关编辑表属性的更多信息，请参阅 [查看和管理表详细信息](tables-described.md#console-tables-details)。

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

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

```
  'groupFiles': 'inPartition'
```

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

```
  'groupSize': '1048576'
```
请注意，应使用计算的结果设置 `groupsize`。例如，1024 \$1 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 不支持此选项。