本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 控制台上使用机器学习转换。
AWS Glue 版本 2.0 作业不支持机器学习转换。有关更多信息,请参阅运行具有较少启动时间的 Spark ETL 作业。
机器学习转换的类型
您可以创建机器学习转换来清理您的数据。您可以从 ETL 脚本中调用这些转换。您的数据在称为 DynamicFrame 的数据结构中从转换传递到转换,该数据结构是 Apache Spark SQL DataFrame
的扩展。 包含您的数据,并引用其架构来处理您的数据。DynamicFrame
提供了以下类型的机器学习转换:
- 查找匹配项
-
在源数据中查找重复记录。您可以通过标记示例数据集来指示哪些行匹配,从而指导此机器学习转换。机器学习转换通过示例标记数据来了解哪些行应与您指导的内容更为匹配。根据您配置转换的方式,输出为下列项之一:
-
输入表的副本加上
match_id
列,其中填充了指示匹配记录集的值。match_id
列为任意标识符。任何具有相同match_id
的记录都已被识别为彼此匹配。具有不同match_id
的记录不匹配。 -
删除了重复行的输入表的副本。如果找到多个重复项,则保留带最小主键的记录。
-
查找匹配项转换
您可以使用 FindMatches
转换查找源数据中的重复记录。生成或提供标签文件以帮助指导转换。
开始使用查找匹配项转换
执行以下步骤来开始使用 FindMatches
转换:
-
在 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)。
-
-
在 AWS Glue 控制台中,创建一个作业,然后选择 Find matches (查找匹配项) 转换类型。
重要 您为作业选择的数据源表不能具有 100 个以上的列。
-
告诉 AWS Glue 生成标签文件,方法是选择 Generate labeling file (生成标签文件)。AWS Glue 在为每个
labeling_set_id
分组相似记录时进行第一次传递,以便您可以查看这些分组。您可以在label
列中标记匹配项。-
如果您已有一个标签文件(即指示匹配行的记录示例),请将该文件上传到 Amazon Simple Storage Service (Amazon S3)。有关标签文件格式的信息,请参阅标签文件格式。继续执行步骤 4。
-
-
下载标签文件并按照 Labeling 部分中的说明标记文件。
-
上传更正后的标签文件。AWS Glue 运行任务以指导转换过程如何查找匹配项。
在 Machine learning transforms (机器学习转换) 列表页面上,选择 History (历史记录) 选项卡。此页面指明 AWS Glue 何时执行以下任务:
-
Import labels (导入标签)
-
Export labels (导出标签)
-
Generate labels (生成标签)
-
Estimate quality (估计质量)
-
-
要创建更好的转换,您可以迭代方式下载、标记和上传标签文件。在初始运行中,可能会有更多记录不匹配。但是,当您通过验证标签文件继续指导它时,AWS Glue 会学习。
-
通过评估查找匹配项转换的性能和结果来评估和调整转换。有关更多信息,请参阅在 AWS Glue 中优化机器学习转换。
Labeling
在 FindMatches
生成标签文件时,将从源表中选择记录。根据之前的训练,FindMatches
标识要从中学习的最有价值的记录。
贴标签 行为是编辑标签文件(我们建议使用电子表格,例如 Microsoft Excel),并在标识匹配和不匹配记录的 label
列中添加标识符或标签。在源数据中对匹配项进行清晰一致的定义非常重要。FindMatches
了解您从中指定作为匹配项(或不匹配项)的记录,并使用您的决策来了解如何查找重复记录。
当 FindMatches
生成标签文件时,会生成大约 100 条记录。这 100 条记录通常分为 10 个标签集,其中每个标签集由 labeling_set_id
生成的唯一 FindMatches
标识。 每个标签集应被视为独立于其他标签集的单独标记任务。您的任务是标识每个标签集中的匹配记录和不匹配记录。
有关在电子表格中编辑标签文件的提示
在电子表格应用程序中编辑标签文件时,请考虑:
-
当列字段完全展开时,文件可能不会打开。您可能需要展开
labeling_set_id
和label
列来查看这些单元格中的内容。 -
如果主键列是数字(例如
long
数据类型),则电子表格可能将它解释为数字并更改值。必须将此键值视为文本。要纠正此问题,请将主键列中的所有单元格格式化为 Text data (文本数据)。
标签文件格式
由 AWS Glue 生成的标签文件,用于指导 FindMatches
转换使用以下格式。如果您生成自己的 AWS Glue 文件,则它也必须采用此格式:
-
它是一个逗号分隔值 (CSV) 文件。
-
它必须在
UTF-8
中编码。 如果您使用 Microsoft Windows 编辑文件,则文件可能使用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_id
、label
)。其余列必须与要处理的数据的架构匹配。 -
对于每个
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 策略向名称以 Amazon S3aws-glue- 为前缀的 存储桶或文件夹授予权限。如果您的标签文件位于其他位置,则在 IAM 角色添加对该位置的权限。