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

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

创建和使用Amazon Glue DataBrew食谱

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

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

注意

单个数据转换中最多可以包含 100 个数据转换 DataBrew 配方。

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

您还可以开发 DataBrew 使用编程配方Amazon Command Line Interface(Amazon CLI) 或者其中一个Amazon开发工具包。在 DataBrew API,转换称为配方操作.

注意

在交互式中 DataBrew 项目会话,您应用的每个数据转换都会导致调用 DataBrew API。这些 API 调用会自动进行,而不必知道 behind-the-scenes 详细信息。

即使你不是程序员,了解食谱的结构以及如何 DataBrew 组织食谱操作。

发布新配方版本

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

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

  2. 输入此版本配方的描述,然后选择发布.

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

定义配方结构

当你第一次使用 DataBrew 控制台中,您可以定义与该项目关联的配方。如果您目前没有配方,控制台将为您创建一个配方。

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

InAmazon 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 根据winner(blackwhite)。然后对这些组中的每个组进行进一步细分,根据victory_status(materesignoutoftime, 和draw)。最后,计算每个子组的出现次数。然后,生成的摘要将替换原始数据样本。

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

  • REPLACE_TEXT— 修改的值victory_status. 此行动有三次发生 —— 每次出现一次materesign, 和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_ratingcolumn. 这些区域有:ConditionExpressionslist 决定了过滤条件:任何有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— 列中没有值。