使用 AWS Lake Formation FindMatches 匹配记录 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用 AWS Lake Formation FindMatches 匹配记录

AWS Lake Formation 提供了机器学习功能,使您能够创建自定义转换来清理数据。当前有一个名为 FindMatches 的可用转换。通过 FindMatches 转换,您可以识别数据集中的重复或匹配记录,即使记录没有公共唯一标识符且没有完全匹配的字段也是如此。这不需要编写任何代码或了解机器学习的工作原理。FindMatches 可用于许多不同的问题,例如:

  • 匹配客户: 在不同客户数据库中链接客户记录,即使许多客户字段与数据库的完全不匹配(例如,不同名称拼写、地址差异、缺少或不准确的数据等)。

  • 匹配产品: 对照其他产品来源(例如针对竞争对手目录的产品目录)中的产品匹配产品,其中条目的结构化不同。

  • 改善欺诈检测: 识别重复客户帐户,确定新创建的帐户何时为(或可能是)以前已知的欺诈用户。

  • 其他匹配问题: 匹配地址、电影、零件列表等。通常,如果有人员可以查看您的数据库行并确定它们是匹配的,那么 FindMatches 转换很可能会帮助到您。

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

在创建转换后,它存储在 AWS Glue 中。在 AWS Glue 控制台中,您可以管理您创建的转换。在 AWS Glue ML transforms (ML 转换) 选项卡上,您可以编辑并继续指导机器学习转换。有关在控制台上管理转换的更多信息,请参阅 在 AWS Glue 控制台上使用机器学习转换

注意

GLUE版本2.0工作不支持机器学习转换。有关详细信息,请参阅 运行火花ETL作业,启动时间缩短.

机器学习转换的类型

您可以创建机器学习转换来清理您的数据。您可以从 ETL 脚本中调用这些转换。您的数据从转换转换为数据结构中的转换 Dynamicframe,这是ApacheSparkSQL的扩展 DataFrame。TheThethe DynamicFrame 包含您的数据,并引用其框架处理您的数据。

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

查找匹配项

在源数据中查找重复记录。您可以通过标记示例数据集来指示哪些行匹配,从而指导此机器学习转换。机器学习转换通过示例标记数据来了解哪些行应与您指导的内容更为匹配。根据您配置转换的方式,输出为下列项之一:

  • 输入表的副本加上 match_id 列,其中填充了指示匹配记录集的值。match_id 列为任意标识符。任何具有相同 match_id 的记录都已被识别为彼此匹配。具有不同 match_id 的记录不匹配。

  • 删除了重复行的输入表的副本。如果找到多个重复项,则保留带最小主键的记录。

查找匹配项转换

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

开始使用查找匹配项转换

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

  1. 在 AWS Glue 数据目录 中为要清理的源数据创建表。有关如何创建爬网程序的信息,请参阅在 AWS Glue 控制台上使用爬网程序

    如果源数据是一个基于文本的文件(如逗号分隔值 (CSV) 文件),请考虑:

    • 将输入记录 CSV 文件和标签文件保存在单独的文件夹中。否则,AWS Glue 爬网程序可能会将其视为同一个表的多个部分,并在 Data Catalog 中错误地创建表。

    • 除非您的 CSV 文件仅包含 ASCII 字符,否则请确保将不含 BOM(字节顺序标记)的 UTF-8 编码用于 CSV 文件。Microsoft Excel 通常在 UTF-8 CSV 文件的开头添加 BOM。要删除它,请在文本编辑器中打开 CSV 文件,并将该文件重新保存为 UTF-8 without BOM (不含 BOM 的 UTF-8)

  2. 在 AWS Glue 控制台中,创建一个作业,然后选择 Find matches (查找匹配项) 转换类型。

    重要

    您为作业选择的数据源表不能具有 100 个以上的列。

  3. 告诉 AWS Glue 生成标签文件,方法是选择 Generate labeling file (生成标签文件)。AWS Glue 在为每个 labeling_set_id 分组相似记录时进行第一次传递,以便您可以查看这些分组。您可以在 label 列中标记匹配项。

    • 如果您已有一个标签文件(即指示匹配行的记录示例),请将该文件上传到 Amazon Simple Storage Service (Amazon S3)。有关标签文件格式的信息,请参阅标签文件格式。继续执行步骤 4。

  4. 下载标签文件并按照 Labeling 部分中的说明标记文件。

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

    Machine learning transforms (机器学习转换) 列表页面上,选择 History (历史记录) 选项卡。此页面指明 AWS Glue 何时执行以下任务:

    • Import labels (导入标签)

    • Export labels (导出标签)

    • Generate labels (生成标签)

    • Estimate quality (估计质量)

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

  7. 通过评估查找匹配项转换的性能和结果来评估和调整转换。有关更多信息,请参阅 在 AWS Glue 中优化机器学习转换。)

Labeling

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

贴标签 行为是编辑标签文件(我们建议使用电子表格,例如 Microsoft Excel),并在标识匹配和不匹配记录的 label 列中添加标识符或标签。在源数据中对匹配设置清晰且一致的定义非常重要。FindMatches 从您指定为匹配的记录中学习,并使用您的决策学习如何找到重复记录。

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

有关在电子表格中编辑标签文件的提示

在电子表格应用程序中编辑标签文件时,请考虑:

  • 当列字段完全展开时,文件可能不会打开。您可能需要展开 labeling_set_idlabel 列来查看这些单元格中的内容。

  • 如果主键列是数字(例如 long 数据类型),则电子表格可能将它解释为数字并更改值。必须将此键值视为文本。要纠正此问题,请将主键列中的所有单元格格式化为 Text data (文本数据)

标签文件格式

由 AWS Glue 生成的标签文件,用于指导 FindMatches 转换使用以下格式。如果您生成自己的 AWS Glue 文件,则它也必须采用此格式:

  • 它是一个逗号分隔值 (CSV) 文件。

  • 必须在 UTF-8。如果您使用MicrosoftWindows编辑文件,则可以使用 cp1252.

  • 它必须位于 Amazon S3 位置以将其传递到 AWS Glue。

  • 对于每个标签任务,使用中等数量的行。建议每个任务的10–20行,但是每个任务的2-30行是可接受的。建议不要执行具有 50 个以上的行的任务,否则可能会导致不良结果或系统故障。

  • 如果已标记的数据由标记为“匹配”或“不匹配”的记录对组成,这种情况是可以接受的。这些标记对可表示为大小为 2 的标签集。在此情况下,如果两条记录匹配,则用字母“A”标记它们,但如果两条记录不匹配,则将一条记录标记为“A”,并将另一条记录标记为“B”。

    注意

    由于它具有其他列,因此,标签文件具有与包含源数据的文件不同的架构。将标签文件放置到与任何转换输入 CSV 文件不同的文件夹中,以便 AWS Glue 爬网程序不会在 Data Catalog 中创建表时考虑它。否则,AWS Glue 爬网程序创建的表可能无法正确展示您的数据。

  • AWS Glue 需要前 2 个列(labeling_set_idlabel)。其余列必须与要处理的数据的架构匹配。

  • 对于每个 labeling_set_id,您使用同一标签来标识所有匹配的记录。标签是 label 列中放置的唯一字符串。我们建议使用包含简单字符(例如 A、B、C 等)的标签。标签区分大小写,并且输入到 label 列中。

  • 包含相同的 labeling_set_id 和相同的标签的行被视为将标记为匹配项。

  • 包含相同的 labeling_set_id 和不同的标签的行被视为将标记为 匹配项

  • 包含不同的 labeling_set_id 的行被视为不传达任何支持或反对匹配的信息。

    下面的示例说明了如何标记数据:

    labeling_set_id label first_name last_name 生日
    ABC123 A John Doe 04/01/1980
    ABC123 B Jane Smith 04/03/1980
    ABC123 A Johnny Doe 04/01/1980
    ABC123 A Jon Doe 04/01/1980
    DEF345 A Richard Jones 12/11/1992
    DEF345 A Rich Jones 11/12/1992
    DEF345 B Sarah Jones 12/11/1992
    DEF345 C. Richie Jones Jr. 05/06/2017
    DEF345 B Sarah Jones-Walker 12/11/1992
    GHI678 A Robert Miller 1/3/1999
    GHI678 A Bob Miller 1/3/1999
    XYZABC A William Robinson 2/5/2001
    XYZABC B Andrew Robinson 2/5/1971
  • 在上面的示例中,我们将 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”显示已分配不同标签的两条记录来表明它们不匹配。

  • 请注意,有时标签集可能不包含匹配项(也就是说,您为标签集中的每条记录分配一个不同的标签),或者标签集中的所有记录可能都“相同”(您为它们分配了相同的标签)。只要您的标签集包含了根据您的标准是“相同的”和“不相同的”记录的示例,就可以了。

重要

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