在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

在 Amazon SageMaker 上连接 Amazon Redshift 和 RStudio

去年,我们宣布了 Amazon SageMaker 上的 RStudio,业界首个完全托管的云端 RStudio Workbench 集成开发环境 (IDE)。 您可以快速启动熟悉的 RStudio IDE,并在不中断工作的情况下调整底层计算资源,从而轻松地在 R 中大规模构建机器学习 (ML) 和分析解决方案。

SageMaker 上的许多 RStudio 用户也是 亚马逊Redshift,一个完全托管的 PB 级大规模并行数据仓库,用于数据存储和分析工作负载。 它使使用标准 SQL 和现有商业智能 (BI) 工具分析所有数据变得快速、简单且经济高效。 用户还可以使用 ODBC、JDBC 或 Amazon Redshift 数据 API 与数据进行交互。

在 SageMaker 和 Amazon Redshift 上使用 RStudio 有助于高效地对云中的大型数据集执行分析。 然而,在云中处理数据可能会带来挑战,例如需要消除组织数据孤岛、维护安全性和合规性以及通过标准化工具降低复杂性。 AWS 提供 SageMaker 上的 RStudio 和 Amazon Redshift 等工具来帮助应对这些挑战。

在这篇博文中,我们将向您展示如何结合使用这两种服务来高效地对云中的海量数据集进行分析,同时应对上述挑战。 本博客重点介绍 Rstudio on Amazon SageMaker 语言,目标受众为业务分析师、数据工程师、数据科学家以及所有使用 R 语言和 Amazon Redshift 的开发人员。

如果您想通过 Amazon Redshift 使用传统的 SageMaker Studio 体验,请参阅 使用 Amazon Redshift 数据 API 从 Amazon SageMaker Jupyter 笔记本进行交互.

解决方案概述

在今天的博客中,我们将执行以下步骤:

  1. 使用所需的包克隆示例存储库。
  2. 使用安全的 ODBC 连接连接到 Amazon Redshift (ODBC 是 RStudio 的首选协议).
  3. 通过 SageMaker 上的 RStudio 对 Amazon Redshift Serverless 中的数据运行查询和 SageMaker API 操作

以下解决方案架构描述了此过程:

解决方案演练

先决条件

在开始之前,请确保您满足在 Amazon SageMaker 和 Amazon Redshift Serverless 上设置 RStudio 的所有要求,例如:

我们将使用 CloudFormation 堆栈来生成所需的基础设施。

请注意: 如果您已经拥有 RStudio 域和 Amazon Redshift 集群,则可以跳过此步骤

启动此堆栈会创建以下资源:

  • 3 私有子网
  • 1 个公共子网
  • 1 个 NAT 网关
  • 互联网网关
  • Amazon Redshift 无服务器集群
  • 带有 RStudio 的 SageMaker 域
  • SageMaker RStudio 用户配置文件
  • SageMaker RStudio 域执行的 IAM 服务角色
  • 用于 SageMaker RStudio 用户配置文件执行的 IAM 服务角色

此模板旨在在区域中工作(例如。 us-east-1, us-west-2) 具有三个可用区、RStudio on SageMaker 和 Amazon Redshift Serverless。 确保您的区域可以访问这些资源,或相应地修改模板。

启动堆栈 按钮创建堆栈。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

  1. 点击 创建堆栈 页面,选择 下一页.
  2. 点击 指定堆栈详细信息 页面,为您的堆栈提供名称并将其余选项保留为默认值,然后选择 下一页.
  3. 点击 配置堆栈选项 页面,将选项保留为默认值,然后按 下一页.
  4. 点击 评论页面,选择
  • 我承认AWS CloudFormation可能会使用自定义名称创建IAM资源
  • 我承认AWS CloudFormation可能需要以下功能:CAPABILITY_AUTO_EXPAND复选框并选择 提交.

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

该模板将生成五个堆栈。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

一旦堆栈状态为 创建完成,导航到 Amazon Redshift Serverless 控制台。 这是一项新功能,可以非常轻松地在任何规模的云中以高性能运行分析。 只需加载您的数据并开始查询。 无需设置和管理集群。

备注:本博客中展示的在 Amazon SageMaker 上集成 Amazon Redshift 和 RStudio 的模式将是相同的,无论 Amazon Redshift 部署模式(无服务器或传统集群)如何。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

在 Amazon Redshift Serverless 中加载数据

CloudFormation 脚本创建了一个名为 sagemaker. 让我们用 RStudio 用户查询的表填充这个数据库。 创建一个 SQL 编辑器选项卡并确保 sagemaker 数据库被选中。 我们将使用 合成信用卡交易数据 在我们的数据库中创建表。 此数据是 SageMaker 示例表格数据集的一部分 s3://sagemaker-sample-files/datasets/tabular/synthetic_credit_card_transactions.

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

我们将在查询编辑器中执行以下查询。 这将生成三个表, 卡,交易, 用户.

CREATE SCHEMA IF NOT EXISTS synthetic;
DROP TABLE IF EXISTS synthetic.transactions;

CREATE TABLE synthetic.transactions(
    user_id INT,
    card_id INT,
    year INT,
    month INT,
    day INT,
    time_stamp TIME,
    amount VARCHAR(100),
    use_chip VARCHAR(100),
    merchant_name VARCHAR(100),
    merchant_city VARCHAR(100),
    merchant_state VARCHAR(100),
    merchant_zip_code VARCHAR(100),
    merchant_category_code INT,
    is_error VARCHAR(100),
    is_fraud VARCHAR(100)
);

COPY synthetic.transactions
FROM 's3://sagemaker-sample-files/datasets/tabular/synthetic_credit_card_transactions/credit_card_transactions-ibm_v2.csv'
IAM_ROLE default
REGION 'us-east-1' 
IGNOREHEADER 1 
CSV;

DROP TABLE IF EXISTS synthetic.cards;

CREATE TABLE synthetic.cards(
    user_id INT,
    card_id INT,
    card_brand VARCHAR(100),
    card_type VARCHAR(100),
    card_number VARCHAR(100),
    expire_date VARCHAR(100),
    cvv INT,
    has_chip VARCHAR(100),
    number_cards_issued INT,
    credit_limit VARCHAR(100),
    account_open_date VARCHAR(100),
    year_pin_last_changed VARCHAR(100),
    is_card_on_dark_web VARCHAR(100)
);

COPY synthetic.cards
FROM 's3://sagemaker-sample-files/datasets/tabular/synthetic_credit_card_transactions/sd254_cards.csv'
IAM_ROLE default
REGION 'us-east-1' 
IGNOREHEADER 1 
CSV;

DROP TABLE IF EXISTS synthetic.users;

CREATE TABLE synthetic.users(
    name VARCHAR(100),
    current_age INT,
    retirement_age INT,
    birth_year INT,
    birth_month INT,
    gender VARCHAR(100),
    address VARCHAR(100),
    apartment VARCHAR(100),
    city VARCHAR(100),
    state VARCHAR(100),
    zip_code INT,
    lattitude VARCHAR(100),
    longitude VARCHAR(100),
    per_capita_income_zip_code VARCHAR(100),
    yearly_income VARCHAR(100),
    total_debt VARCHAR(100),
    fico_score INT,
    number_credit_cards INT
);

COPY synthetic.users
FROM 's3://sagemaker-sample-files/datasets/tabular/synthetic_credit_card_transactions/sd254_users.csv'
IAM_ROLE default
REGION 'us-east-1' 
IGNOREHEADER 1 
CSV;

您可以通过在查询编辑器的左侧窗格中查看三个表来验证查询是否成功运行。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

填充所有表后,导航到 SageMaker RStudio 并在 ml.m5.xlarge 实例上使用 RSession 基础映像启动新会话。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

会话启动后,我们将运行此代码以创建与 Amazon Redshift Serverless 数据库的连接。

library(DBI)
library(reticulate)
boto3 <- import('boto3')
client <- boto3$client('redshift-serverless')
workgroup <- unlist(client$list_workgroups())
namespace <- unlist(client$get_namespace(namespaceName=workgroup$workgroups.namespaceName))
creds <- client$get_credentials(dbName=namespace$namespace.dbName,
                                durationSeconds=3600L,
                                workgroupName=workgroup$workgroups.workgroupName)
con <- dbConnect(odbc::odbc(),
                 Driver='redshift',
                 Server=workgroup$workgroups.endpoint.address,
                 Port='5439',
                 Database=namespace$namespace.dbName,
                 UID=creds$dbUser,
                 PWD=creds$dbPassword)

为了查看合成模式中的表,您需要通过查询编辑器在 Amazon Redshift 中授予访问权限。

GRANT ALL ON SCHEMA synthetic to "IAMR:SageMakerUserExecutionRole";
GRANT ALL ON ALL TABLES IN SCHEMA synthetic to "IAMR:SageMakerUserExecutionRole";

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

RStudio 连接 窗格应显示 sagemaker 具有模式合成和表卡、事务、用户的数据库。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

您可以单击表格旁边的表格图标来查看 1,000 条记录。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

注意:我们已经创建了一个预构建的 R Markdown 文件,其中包含可以在项目中找到的所有预构建代码块 GitHub回购.

现在让我们使用 DBI 封装函数 dbListTables() 查看现有表。

dbListTables(con)

使用 dbGetQuery() 将 SQL 查询传递给数据库。

dbGetQuery(con, "select * from synthetic.users limit 100")
dbGetQuery(con, "select * from synthetic.cards limit 100")
dbGetQuery(con, "select * from synthetic.transactions limit 100")

我们也可以使用 dbplyrdplyr 在数据库中执行查询的包。 让我们 count() 交易表中有多少笔交易。 但首先,我们需要安装这些包。

install.packages(c("dplyr", "dbplyr", "crayon"))

使用 tbl() 在指定模式时运行。

library(dplyr)
library(dbplyr)

users_tbl <- tbl(con, in_schema("synthetic", "users"))
cards_tbl <- tbl(con, in_schema("synthetic", "cards"))
transactions_tbl <- tbl(con, in_schema("synthetic", "transactions"))

让我们计算每个表的行数。

count(users_tbl)
count(cards_tbl)
count(transactions_tbl)

所以我们有 2,000 个用户; 6,146 张卡片; 和 24,386,900 笔交易。 我们还可以在控制台中查看表格。

transactions_tbl

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

我们还可以查看什么 dplyr 动词在幕后进行。

show_query(transactions_tbl)

让我们直观地探索每年的交易数量。

transactions_by_year %
  count(year) %>%
  arrange(year) %>%
  collect()

transactions_by_year
install.packages(c('ggplot2', 'vctrs'))
library(ggplot2)
ggplot(transactions_by_year) +
  geom_col(aes(year, as.integer(n))) +
  ylab('transactions') 

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。

我们还可以将数据库中的数据汇总如下:

transactions_tbl %>%
  group_by(is_fraud) %>%
  count()
transactions_tbl %>%
  group_by(merchant_category_code, is_fraud) %>%
  count() %>% 
  arrange(merchant_category_code)

假设我们要查看使用卡信息的欺诈行为。 我们只需要连接表,然后按属性对它们进行分组。

cards_tbl %>%
  left_join(transactions_tbl, by = c("user_id", "card_id")) %>%
  group_by(card_brand, card_type, is_fraud) %>%
  count() %>% 
  arrange(card_brand)

现在让我们准备一个可用于机器学习的数据集。 让我们过滤交易数据以仅包含 Discover 信用卡,同时仅保留一部分列。

discover_tbl %
  filter(card_brand == 'Discover', card_type == 'Credit') %>%
  left_join(transactions_tbl, by = c("user_id", "card_id")) %>%
  select(user_id, is_fraud, merchant_category_code, use_chip, year, month, day, time_stamp, amount)

现在让我们使用以下转换进行一些清理:

  • 转化率 is_fraud 到二进制属性
  • 从中删除交易字符串 use_chip 并将其重命名为类型
  • 将年、月、日组合成一个数据对象
  • 从金额中删除 $ 并转换为数字数据类型
discover_tbl %
  mutate(is_fraud = ifelse(is_fraud == 'Yes', 1, 0),
         type = str_remove(use_chip, 'Transaction'),
         type = str_trim(type),
         type = tolower(type),
         date = paste(year, month, day, sep = '-'),
         date = as.Date(date),
         amount = str_remove(amount, '[$]'),
         amount = as.numeric(amount)) %>%
  select(-use_chip, -year, -month, -day)

现在我们已经过滤和清理了我们的数据集,我们准备好将这个数据集收集到本地 RAM 中。

discover <- collect(discover_tbl)
summary(discover)

现在我们有了一个工作数据集,可以开始创建特征和拟合模型。 我们不会在本博客中介绍这些步骤,但如果您想了解有关在 SageMaker 上的 RStudio 中构建模型的更多信息,请参阅 宣布在 Amazon SageMaker 上为数据科学家提供完全托管的 RStudio.

净化

要清理任何资源以避免产生经常性成本,请删除根 CloudFormation 模板。 同时删除创建的所有 EFS 挂载以及创建的任何 S3 存储桶和对象。

结论

在云中处理大型数据集时,数据分析和建模可能具有挑战性。 Amazon Redshift 是一个流行的数据仓库,可以帮助用户执行这些任务。 RStudio 是使用最广泛的数据分析集成开发环境 (IDE) 之一,通常与 R 语言一起使用。 在这篇博文中,我们展示了如何在 SageMaker 上结合使用 Amazon Redshift 和 RStudio 以高效地对海量数据集执行分析。 通过在 SageMaker 上使用 RStudio,用户可以利用 SageMaker 的完全托管基础设施、访问控制、网络和安全功能,同时还可以简化与 Amazon Redshift 的集成。 如果您想了解更多关于一起使用这两个工具的信息,请查看我们的其他博客文章和资源。 您也可以自己尝试在 SageMaker 和 Amazon Redshift 上使用 RStudio,看看它们如何帮助您完成数据分析和建模任务。

请将您的反馈添加到此博客,或在 GitHub上.


作者简介

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。瑞安·加纳(Ryan Garner) 是 AWS 专业服务的数据科学家。 他热衷于帮助 AWS 客户使用 R 解决他们的数据科学和机器学习问题。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。拉吉帕塔克 是一名高级解决方案架构师和技术专家,专门从事金融服务(保险、银行、资本市场)和机器学习。 他专注于自然语言处理 (NLP)、大型语言模型 (LLM) 和机器学习基础设施和运营项目 (MLOps)。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。阿迪提·拉吉尼什 是滑铁卢大学软件工程二年级学生。 她的兴趣包括计算机视觉、自然语言处理和边缘计算。 她还热衷于基于社区的 STEM 外展和宣传。 在业余时间,她会去攀岩、弹钢琴或学习如何烤出完美的烤饼。

在 Amazon SageMaker PlatoBlockchain 数据智能上连接 Amazon Redshift 和 RStudio。 垂直搜索。 人工智能。赛特佳·普迪 是位于德克萨斯州达拉斯的 AWS 的解决方案架构师。 他已经在 AWS 工作 3 年多了,作为客户值得信赖的顾问,帮助客户发挥 AWS 的真正潜力。 他具有应用程序开发背景,对数据科学和机器学习感兴趣。

时间戳记:

更多来自 AWS机器学习