创建和使用 Amazon Glue DataBrew 食谱 - Amazon Glue DataBrew
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建和使用 Amazon Glue DataBrew 食谱

在中 DataBrew,配方是一组数据转换步骤。您可以将这些步骤应用于数据样本,也可以将相同的方法应用于数据集。

开发配方的最简单方法是创建一个 DataBrew 项目,您可以在其中以交互方式处理数据样本——有关更多信息,请参阅。创建和使用 Amazon Glue DataBrew 项目作为项目创建工作流程的一部分,将创建一个新的(空的)配方并将其附加到项目中。然后,您可以通过添加数据转换开始构建配方。

注意

一个 DataBrew 配方最多可包含 100 个数据转换。

在继续开发食谱时,您可以通过发布食谱来保存您所做的工作。 DataBrew 为您的食谱维护已发布版本的列表。您可以在配方作业中使用任何已发布的版本来运行配方(在配方作业中)来转换您的数据集。您也可以下载配方步骤的副本,以便可以在其他项目或其他数据集转换中重复使用该配方。

您也可以使用 Amazon Command Line Interface (Amazon CLI) 或其中一个 Amazon SDK 以编程方式开发 DataBrew 配方。在 DataBrew API 中,转换被称为配方操作

注意

在交互式 DataBrew 项目会话中,您应用的每次数据转换都会导致对 DataBrew API 的调用。这些 API 调用会自动发生,您无需知道 behind-the-scenes 细节。

即使你不是程序员,了解配方的结构以及如何 DataBrew 组织配方操作也会很有帮助。

发布配方的新版本

您可以在交互式 DataBrew 项目会话中发布配方的新版本。

发布的新配方版本
  1. 在配方窗格中,选择 “发布”。

  2. 输入此版本食谱的描述,然后选择 “发布”。

您可以通过从导航窗格中选择 PROJECTS 来查看所有已发布的食谱及其版本。

定义配方结构

首次使用 DataBrew 控制台创建项目时,需要定义与该项目关联的配方。如果您没有现有配方,控制台将为您创建配方。

在控制台中处理项目时,您可以使用转换工具栏对数据集中的示例数据应用操作。在您继续构建配方时,控制台会显示配方步骤以及这些步骤的顺序。您可以对配方进行迭代和完善,直到您对步骤感到满意为止。

在中入门 Amazon Glue DataBrew,你构建了一个用于转换著名国际象棋游戏数据集的配方。您可以通过选择 “下载为 JSON” 或 “下载为 YAML” 来下载配方步骤的副本,如以下屏幕截图所示。

下载的 JSON 文件包含与您添加到配方中的转换相对应的配方操作。

新食谱没有任何步骤。您可以将新配方表示为空的 JSON 列表,如下所示。

[ ]

下面是此文件的一个示例,适用于chess-project-recipe。JSON 列表包含几个描述配方步骤的对象。JSON 列表中的每个对象都用大括号 () { } 括起来。JSON 行由逗号分隔。

[ { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "white_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "white_rating" } ] }, { "Action": { "Operation": "GROUP_BY", "Parameters": { "groupByAggFunctionOptions": "[{\"sourceColumnName\":\"winner\",\"targetColumnName\":\"winner_count\",\"targetColumnDataType\":\"int\",\"functionName\":\"COUNT\"}]", "sourceColumns": "[\"winner\",\"victory_status\"]", "useNewDataFrame": "true" } } }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\"]", "TargetColumn": "winner" } ] }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "mate", "sourceColumn": "victory_status", "value": "checkmate" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "resign", "sourceColumn": "victory_status", "value": "other player resigned" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "outoftime", "sourceColumn": "victory_status", "value": "ran out of time" } } } ]

如果我们只为新操作添加新行,则更容易看到每个操作都是单独的行,如下所示。

[ { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "white_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "white_rating" } ] }, { "Action": { "Operation": "GROUP_BY", "Parameters": { "groupByAggFunctionOptions": "[{\"sourceColumnName\":\"winner\",\"targetColumnName\":\"winner_count\",\"targetColumnDataType\":\"int\",\"functionName\":\"COUNT\"}]", "sourceColumns": "[\"winner\",\"victory_status\"]", "useNewDataFrame": "true" } } }, { "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\"]", "TargetColumn": "winner" } ] }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "mate", "sourceColumn": "victory_status", "value": "checkmate" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "resign", "sourceColumn": "victory_status", "value": "other player resigned" } } }, { "Action": { "Operation": "REPLACE_TEXT", "Parameters": { "pattern": "outoftime", "sourceColumn": "victory_status", "value": "ran out of time" } } } ]

这些操作按顺序执行,顺序与文件中的顺序相同:

  • REMOVE_VALUES— 要筛选出所有玩家评分低于 1,800 的游戏,这是成为 A 级国际象棋选手所需的最低评分。这种动作有两次出现,一次是移除黑方不是 A 级玩家的玩家,另一次是移除白方没有达到这个等级的玩家。

  • GROUP_BY— 汇总数据。在这种情况下,GROUP_BY 根据winnerblackwhite)的值将行分成几组。然后进一步细分每个组,根据 victory_status (、materesignoutoftime、和draw) 的值将行分成子组。最后,计算每个子组的出现次数。然后,生成的摘要将替换原始数据样本。

  • REMOVE_VALUES— 删除结尾为的游戏的结果draw

  • REPLACE_TEXT— 修改的值victory_status。此操作会出现三次,分别用于mate、和。resign oufoftime

在交互式 DataBrew 项目会话中,每个会话RecipeAction对应于您应用于数据样本的数据转换。

DataBrew 提供 200 多个配方操作。有关更多信息,请参阅 配方步骤和功能参考

使用条件

您可以使用条件来缩小配方操作的范围。条件用于筛选数据的转换,例如,根据特定的列值删除不需要的行。

让我们更仔细地看看中的配方操作chess-project-recipe

{ "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "black_rating" } }, "ConditionExpressions": [ { "Condition": "LESS_THAN", "Value": "1800", "TargetColumn": "black_rating" } ] }

此转换会读取black_rating列中的值。该ConditionExpressions列表决定了筛选标准:任何black_rating值小于 1,800 的行都将从数据集中移除。

对于,配方中的后续改造也会起到同样的作用white_rating。这样,数据仅限于每位玩家(黑人或白人)被评为A级或以上的游戏。

以下是应用于一列字符数据的条件的另一个示例。

{ "Action": { "Operation": "REMOVE_VALUES", "Parameters": { "sourceColumn": "winner" } }, "ConditionExpressions": [ { "Condition": "IS", "Value": "[\"draw\"]", "TargetColumn": "winner" } ] }

此转换读取winner列中的值,查找值draw并删除这些行。这样,数据仅限于那些有明显赢家的游戏。

DataBrew 支持以下条件:

  • IS-此列中的值与条件中提供的值相同。

  • IS_NOT-此列中的值与条件中提供的值不同。

  • IS_BETWEEN— 列中的值介于GREATER_THAN_EQUALLESS_THAN_EQUAL参数之间。

  • CONTAINS-此列中的字符串值包含条件中提供的值。

  • NOT_CONTAINS-此列中的值不包含条件中提供的字符串。

  • STARTS_WITH-此列中的值以条件中提供的字符串开始。

  • NOT_STARTS_WITH-此列中的值不是条件中提供的字符串。

  • ENDS_WITH-此列中的值以条件中提供的字符串结尾。

  • NOT_ENDS_WITH-此列中的值不是条件中提供的字符串。

  • LESS_THAN-此列中的值小于条件中提供的值。

  • LESS_THAN_EQUAL-此列中的值小于或等于条件中提供的值。

  • GREATER_THAN-此列中的值大于条件中提供的值。

  • GREATER_THAN_EQUAL-此列中的值大于或等于条件中提供的值。

  • IS_INVALID— 该列中的值的数据类型不正确。

  • IS_MISSING— 该列中没有值。