

# 分配
<a name="dqdl-rule-types-Distribution"></a>

使用 `Distribution` 分析器计算列中值的频率分布。分析器根据列数据类型生成不同的输出：
+ **数值列**：生成分箱直方图。直方图将列的值范围划分为等宽间隔（分箱），并计算每个分箱中的值数量。
+ **字符串、日期和其他非数值列**：生成值分布，统计每个不同值的出现频率，并按频率降序排列。分析器仅返回频率最高的前 20 个值。

**注意**  
您只能在 DQDL 规则集的 `Analyzers` 区块中使用 `Distribution` 分析器。它不能作为规则使用。

**语法**

```
Distribution {{<COL_NAME>}}
Distribution {{<COL_NAME>}} with bins = {{<BIN_COUNT>}}
Distribution {{<COL_NAME>}} with bins = {{<BIN_COUNT>}}, rebin = {{<true|false>}}
```
+ **COL\_NAME**：要分析的列的名称，或计算数据集中所有列的分布的 `AllColumns`。

  **支持的列类型**：任何列类型
+ **分箱**（可选）：用于数值列直方图的分箱（间隔）数量。默认值为 20。最大值为 20。该参数对非数值列无效。
+ **重新分箱**（可选）：控制自动重新分箱行为。当连续运行时溢出超过阈值，分析器会自动重新分箱。默认值为 `true`。设置为 `false`，无论溢出频率如何，都可无限期冻结分箱边界。有关更多信息，请参阅 [自动重新分箱](dqdl.md#dqdl-analyzers-distribution-rebinning)。

**示例：单列的基本分布**

以下示例使用默认的 20 个分箱计算 `Salary` 列的频率分布：

```
Analyzers = [
    Distribution "Salary"
]
```

**示例：自定义分箱计数**

以下示例使用 10 个分箱计算 `Age` 列的直方图：

```
Analyzers = [
    Distribution "Age" with bins = 10
]
```

**示例：所有列的分布**

以下示例计算数据集中所有列的分布。数值列生成包含 20 个分箱的直方图，非数值列生成值分布：

```
Analyzers = [
    Distribution AllColumns
]
```

**示例：与规则和其他分析器相结合**

以下示例显示了将规则、标准分析器和 `Distribution` 分析器组合在一起的规则集：

```
Rules = [
    RowCount > 100,
    Completeness "Salary" > 0.9
]
Analyzers = [
    Mean "Salary",
    StandardDeviation "Salary",
    Distribution "Salary" with bins = 15,
    Distribution "Department"
]
```

**输出格式**

运行 `Distribution` 分析器时，它会生成名为 `Distribution` 的统计数据。标量统计数据（例如 `Mean` 或 `Sum`）会返回单个数值。相比之下，`Distribution` 统计数据返回的是结构化结果：
+ `BinEdges`：定义分箱边界（对于数值列）或不同值（对于非数值列）的数组。
+ `Count`：每个分箱或值的频率数组。

您可以使用 `ListDataQualityStatistics` API 或 `GetDataQualityResult` API 检索分布结果。有关数据质量 API 的更多信息，请参阅 *Amazon Glue API 参考*中的[数据质量 API](https://docs.amazonaws.cn/glue/latest/dg/aws-glue-api-data-quality.html)。

**零值行为**

分析器将目标列中含有 NULL 值的行排除在分箱计算之外。

有关冻结分箱边缘、溢出观测值和自动重新分箱的更多信息，请参阅 [分布分析器](dqdl.md#dqdl-analyzers-distribution)。