

# 与 Amazon Lake Formation FindMatches 匹配的记录
<a name="machine-learning"></a>

**注意**  
目前在以下区域，在 Amazon Glue 控制台中无法进行记录匹配：中东（阿联酋）、欧洲（西班牙）、亚太地区（雅加达）和欧洲（苏黎世）。

Amazon Lake Formation 提供了机器学习功能，使您能够创建自定义转换来清理数据。当前有一个名为 FindMatches 的可用转换。通过 FindMatches 转换，您可以识别数据集中的重复或匹配记录，即使记录没有公共唯一标识符且没有完全匹配的字段也是如此。这不需要编写任何代码或了解机器学习的工作原理。FindMatches 可用于许多不同的问题，例如：
+ **匹配客户**：在不同的客户数据库中链接客户记录，即使许多客户字段与数据库不完全匹配（例如，不同的名称拼写、地址差异、缺失或不准确的数据等）。
+ **匹配产品**：将目录中的产品与其他产品来源相匹配，例如针对竞争对手目录的产品目录（其中条目的结构不同）。
+ **改进欺诈检测**：识别重复的客户账户，确定新创建的账户何时会（或可能会）与先前已知的欺诈用户匹配。
+ **其他匹配问题**：匹配地址、电影、零件列表等等。通常，如果有人员可以查看您的数据库行并确定它们是匹配的，那么 FindMatches 转换很可能会帮助到您。

 您可以在创建作业时创建这些转换。您创建的转换基于源数据存储架构和您标记的源数据集中的示例数据（我们将此流程称为“指导”转换）。您标记的记录必须位于源数据集中。在此过程中，我们生成一个您标记的文件，然后上传回转换将以某种方式从中学习的文件。在您教授转换后，可以从基于 Spark 的 Amazon Glue 任务（PySpark 或 Scala Spark）中调用它，并在具有兼容源数据存储的其他脚本中使用它。

 在创建转换后，它存储在 Amazon Glue 中。在 Amazon Glue 控制台中，您可以管理您创建的转换。在导航窗格的**数据集成和 ETL**下，**数据分类工具 > 记录匹配**，您可以编辑并继续教机器学习转换。有关在控制台上管理转换的更多信息，请参阅 [使用机器学习转换](console-machine-learning-transforms.md)。

**注意**  
Amazon Glue 版本 2.0 FindMatches 任务使用 Amazon S3 存储桶 `aws-glue-temp-<accountID>-<region>` 在转换处理数据时存储临时文件。您可以在运行完成后，以手动方式或通过设置 Amazon S3 生命周期规则来删除此数据。

## 机器学习转换的类型
<a name="machine-learning-transforms"></a>

您可以创建机器学习转换来清理您的数据。您可以从 ETL 脚本中调用这些转换。您的数据在一个称为 *DynamicFrame* 的数据结构中从转换传递到转换，该数据结构是 Apache Spark SQL `DataFrame` 的扩展。`DynamicFrame` 包含您的数据，并引用其架构来处理您的数据。

提供了以下类型的机器学习转换：

*查找匹配项*  
在源数据中查找重复记录。您可以通过标记示例数据集来指示哪些行匹配，从而指导此机器学习转换。机器学习转换通过示例标记数据来了解哪些行应与您指导的内容更为匹配。根据您配置转换的方式，输出为下列项之一：  
+ 输入表的副本加上 `match_id` 列，其中填充了指示匹配记录集的值。`match_id` 列为任意标识符。任何具有相同 `match_id` 的记录都已被识别为彼此匹配。具有不同 `match_id` 的记录不匹配。
+ 删除了重复行的输入表的副本。如果找到多个重复项，则保留带最小主键的记录。

*查找递增匹配项*  
还可以将查找匹配项转换配置为在现有帧和递增帧中查找匹配项，然后作为输出返回一列，其中包含每个匹配组一个唯一的 ID。  
有关更多信息，请参阅：[查找递增匹配项](machine-learning-incremental-matches.md)。

### 使用 FindMatches 转换
<a name="machine-learning-find-matches"></a>

您可以使用 `FindMatches` 转换查找源数据中的重复记录。生成或提供标签文件以帮助指导转换。

**注意**  
目前，在以下区域不支持使用自定义加密密钥的 `FindMatches` 转换：  
亚太地区（大阪）- `ap-northeast-3`

 要开始使用 FindMatches 转换，您可以按照以下步骤操作。有关更高级和更详细的示例，请参阅 **Amazon Big Data Blog**: [Harmonize data using Amazon Glue and Amazon Lake Formation FindMatches ML to build a customer 360 view](https://www.amazonaws.cn/blogs/big-data/harmonize-data-using-aws-glue-and-aws-lake-formation-findmatches-ml-to-build-a-customer-360-view/)。

#### 开始使用查找匹配项转换
<a name="machine-learning-find-mathes-workflow"></a>

执行以下步骤来开始使用 `FindMatches` 转换：

1. 在 Amazon Glue Data Catalog 中为要清理的源数据创建表。有关如何创建爬网程序的信息，请参阅[在 Amazon Glue 控制台上使用爬网程序](https://docs.amazonaws.cn/glue/latest/dg/console-crawlers.html)。

   如果源数据是一个基于文本的文件（如逗号分隔值 (CSV) 文件），请考虑：
   + 将输入记录 CSV 文件和标签文件保存在单独的文件夹中。否则，Amazon Glue 爬网程序可能会将其视为同一个表的多个部分，并在数据目录中错误地创建表。
   + 除非您的 CSV 文件仅包含 ASCII 字符，否则请确保将不含 BOM（字节顺序标记）的 UTF-8 编码用于 CSV 文件。Microsoft Excel 通常在 UTF-8 CSV 文件的开头添加 BOM。要删除它，请在文本编辑器中打开 CSV 文件，并将该文件重新保存为 **UTF-8 without BOM (不含 BOM 的 UTF-8)**。

1. 在 Amazon Glue 控制台中，创建一个作业，然后选择 **Find matches (查找匹配项)** 转换类型。
**重要**  
您为作业选择的数据源表不能具有 100 个以上的列。

1. 告诉 Amazon Glue 生成标签文件，方法是选择 **Generate labeling file (生成标签文件)**。Amazon Glue 在为每个 `labeling_set_id` 分组相似记录时进行第一次传递，以便您可以查看这些分组。您可以在 `label` 列中标记匹配项。
   + 如果您已有一个标签文件（即指示匹配行的记录示例），请将该文件上传到 Amazon Simple Storage Service（Amazon S3）。有关标签文件格式的信息，请参阅[标签文件格式](#machine-learning-labeling-file)。继续执行步骤 4。

1. 下载标签文件并按照 [标签](#machine-learning-labeling) 部分中的说明标记文件。

1. 上传更正后的标签文件。Amazon Glue 运行任务以指导转换过程如何查找匹配项。

   在 **Machine learning transforms (机器学习转换)** 列表页面上，选择 **History (历史记录)** 选项卡。此页面指明 Amazon Glue 何时执行以下任务：
   + **Import labels (导入标签)**
   + **Export labels (导出标签)**
   + **Generate labels (生成标签)**
   + **Estimate quality (估计质量)**

1. 要创建更好的转换，您可以迭代方式下载、标记和上传标签文件。在初始运行中，可能会有更多记录不匹配。但是，当您通过验证标签文件继续指导它时，Amazon Glue 会学习。

1. 通过评估查找匹配项转换的性能和结果来评估和调整转换。有关更多信息，请参阅 [在 Amazon Glue 中优化机器学习转换](add-job-machine-learning-transform-tuning.md)。

#### 标签
<a name="machine-learning-labeling"></a>

在 `FindMatches` 生成标签文件时，将从源表中选择记录。根据之前的训练，`FindMatches` 标识要从中学习的最有价值的记录。

*贴标签*行为是编辑标签文件（我们建议使用电子表格，例如 Microsoft Excel），并在标识匹配和不匹配记录的 `label` 列中添加标识符或标签。在源数据中对匹配项进行清晰一致的定义非常重要。`FindMatches` 了解您指定为匹配项（或不匹配项）的记录，并使用您的决定来学习如何查找重复记录。

当 `FindMatches` 生成标签文件时，会生成大约 100 条记录。这 100 条记录通常将分成 10 个*标签集*，其中每个标签集由 `FindMatches` 生成的一个唯一 `labeling_set_id` 标识。每个标签集应被视为独立于其他标签集的单独的贴标签任务。您的任务是标识每个标签集中的匹配记录和不匹配记录。

##### 有关在电子表格中编辑标签文件的提示
<a name="machine-learning-labeling-tips"></a>

在电子表格应用程序中编辑标签文件时，请考虑：
+ 当列字段完全展开时，文件可能不会打开。您可能需要展开 `labeling_set_id` 和 `label` 列来查看这些单元格中的内容。
+ 如果主键列是数字（例如 `long` 数据类型），则电子表格可能将它解释为数字并更改值。必须将此键值视为文本。要纠正此问题，请将主键列中的所有单元格格式化为 **Text data (文本数据)**。

#### 标签文件格式
<a name="machine-learning-labeling-file"></a>

由 Amazon Glue 生成的标签文件，用于指导 `FindMatches` 转换使用以下格式。如果您生成自己的 Amazon Glue 文件，则它也必须采用此格式：
+ 它是一个逗号分隔值（CSV）文件。
+ 必须使用 `UTF-8` 对它进行编码。如果您使用 Microsoft Windows 编辑文件，则可使用 `cp1252` 对其进行编码。
+ 它必须位于 Amazon S3 位置才能传递到 Amazon Glue。
+ 为每个标记任务使用中等数量的行。建议每个任务 10-20 行，但每个任务可以接受 2-30 行。建议不要执行具有 50 个以上的行的任务，否则可能会导致不良结果或系统故障。
+ 如果已标记的数据由标记为“匹配”或“不匹配”的记录对组成，这种情况是可以接受的。这些标记对可表示为大小为 2 的标签集。在此情况下，如果两条记录匹配，则用字母“A”标记它们，但如果两条记录不匹配，则将一条记录标记为“A”，并将另一条记录标记为“B”。
**注意**  
 由于它具有其他列，因此，标签文件具有与包含源数据的文件不同的架构。将标签文件放置到与任何转换输入 CSV 文件不同的文件夹中，以便 Amazon Glue 爬网程序不会在数据目录中创建表时考虑它。否则，Amazon Glue 爬网程序创建的表可能无法正确展示您的数据。
+ Amazon Glue 需要前 2 个列（`labeling_set_id`、`label`）。其余列必须与要处理的数据的架构匹配。
+ 对于每个 `labeling_set_id`，您使用同一标签来标识所有匹配的记录。标签是 `label` 列中放置的唯一字符串。我们建议使用包含简单字符（例如 A、B、C 等）的标签。标签区分大小写，并且输入到 `label` 列中。
+ 包含相同的 `labeling_set_id` 和相同的标签的行被视为将标记为匹配项。
+ 包含相同的 `labeling_set_id` 和不同的标签的行被视为将标记为*不*匹配项
+ 包含不同的 `labeling_set_id` 的行被视为不传达任何支持或反对匹配的信息。

  下面的示例说明了如何标记数据：    
<a name="table-labeling-data"></a>[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/glue/latest/dg/machine-learning.html)
+ 在上面的示例中，我们将 John/Johnny/Jon Doe 标识为匹配项，并告知系统这些记录与 Jane Smith 不匹配。另外，我们告诉系统 Richard 和 Rich Jones 是同一个人，但是这些记录与 Sarah Jones/Jones-Walker 和 Richie Jones Jr 不匹配。
+ 正如您所看到的，标签的范围限于 `labeling_set_id`。因此，标签不会跨 `labeling_set_id` 边界。例如，`labeling_set_id` 1 中的标签“A”与 `labeling_set_id` 2 中的标签“A”没有任何关系。
+ 如果一条记录在标签集中没有任何匹配项，请为该记录分配一个唯一标签。例如，Jane Smith 与标签集 ABC123 中的任何记录都不匹配，因此它是该标签集中唯一带有标签 B 的记录。
+ 标记集“GHI678”表明一个标签集可以仅包含两条记录，将为这两条记录分配同一标签来表明它们匹配。同样，“XYZABC”显示已分配不同标签的两条记录来表明它们不匹配。
+ 请注意，有时标签集可能不包含匹配项（也就是说，您为标签集中的每条记录分配一个不同的标签），或者标签集中的所有记录可能都“相同”（您为它们分配了相同的标签）。只要您的标签集包含了根据您的标准是“相同的”和“不相同的”记录的示例，就可以了。

**重要**  
确认要传递到 Amazon Glue 的 IAM 角色具有对包含标签文件的 Amazon S3 存储桶的访问权限。按照惯例，Amazon Glue 策略向名称前缀为 **aws-glue-** 的 Amazon S3 存储桶或文件夹授予权限。如果您的标签文件位于其他位置，则在 IAM 角色中添加对该位置的权限。