阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

开始在 Amazon Web Services 上使用 R

  • 2020-04-05
  • 本文字数:3513 字

    阅读完需:约 12 分钟

开始在 Amazon Web Services 上使用 R

随着 R 工作负载增加且消耗的资源越来越多,出于成本、速度和弹性原因,从本地计算环境迁移到 Amazon Web Services (AWS) 上可扩展的完全托管型云服务成为极其宝贵的能力。在这个包含两部分的博文系列中,第一部分将讨论 R 的基本知识和 AWS 上 R 的常见工作负载对。在第二部分“使用 R 和 Amazon Web Services 进行文档分析”中,我们将深入探讨如何使用 AWS 服务构建端到端文档处理应用程序。

R 的背景

R 是统计员、科学家和数据分析师常用的编程语言。它的大型用户社区已开发出数千个可免费使用的软件包,包括用于数据操作数据可视化专门的统计估算程序机器学习,访问美国人口普查数据Spotify 等公共数据 API、轻松开发基于数据的 Web 应用程序很多其他领域的软件包。同时还提供说明如何有效使用 R 的高质量免费在线手册和其他文档。****


R 生态系统中其中一个最常见的软件包集为 Tidyverse,它是转换和使用“有序”数据的库集合。它们旨在让用户能够以数据接收时的任何形式(例如 CSV、API 等)提取数据,并使用数据操作的声明性“语法”将数据轻松转换为分析所需的形状。Tidyverse 非常适合大量数据分析任务,它在 R 持续广受欢迎中起到重要作用。


R 生态系统的另一个重要部分是开发环境 RStudio。RStudio 设计用于数据科学。除了提供编辑器和调试器之外,RStudio 还可让用户使用内置的数据查看器查看内存数据结构,该数据查看器可让我们像电子表格一样排序和筛选、查看我们制作的任何图表、查看我们的数据库连接等等。IDE 背后的公司(也称为 RStudio)赞助了很多 R 开发项目(包括 Tidyverse)、举办了很多会议,并且提供了 R 服务器软件的免费和付费版本,包括将 R 应用程序作为 Web 应用程序托管的软件。

AWS 上的 R 的使用案例

大数据处理

随着数据分析朝着更大的数据集发展,过去可能习惯于在笔记本电脑上运行本地分析的 R 用户将因为计算、内存和成本限制而遇到障碍。通过将工作流移动到 AWS,R 用户可以克服这些障碍。R 通常用于估算需要大量计算能力和时间(数小时甚至数天)来构建的复杂统计模型。使用根据工作负载定制的 Amazon Elastic Compute Cloud (Amazon EC2) 实例或者 Amazon Elastic Kubernetes Service (Amazon EKS)、Amazon Elastic Container Service (Amazon ECS)AWS FargateAWS Batch 上运行的容器,AWS 托管型计算服务可以帮助加快模型开发。


对于大数据问题,R 可能会受到本地可用内存的限制;内存增强型实例类型可为此提供帮助。默认情况下,R 会处理内存中的数据,因此,使用具有更多内存的实例会使问题易于解决,而无需对代码进行更改。很多问题也会并行存在,在 R 对并行处理的支持下,修改代码以使用 R 的并行处理软件包可使用户利用具有大量核心的实例类型。开发人员可以在 AWS 的 R 类型(内存优化型)和 C 类型(计算优化型)实例之间选择一种与您计算和内存工作负载需求密切匹配的实例类型。


通常,数据科学家只是在部分时间处理这些大问题,运行永久性 Amazon EC2 实例或容器不会产生成本效益。AWS Batch 非常适合这些工作负载类型,它将负责启动实例、运行作业,然后在作业完成时关闭实例。由于您只需在实例运行时付费,当您没有积极使用实例时,您不必为强大的机器付费,并且也不受固定、静态的处理能力限制。

数据库

数据库是数据科学团队的宝贵资源;它们为数据集提供单一的真实数据来源,并且提供很高的读取和写入性能。我们可以通过 Amazon Relational Database Service (Amazon RDS) 利用 PostgreSQL 等常见数据库,同时让 AWS 负责底层实例和数据库维护。很多情况下,R 只需少许修改即可与这些服务交互;R 内的 Tidyverse 软件包可使您编写代码,无论它将在哪里运行,并且还能使您重新定义代码,以对来源于数据库的数据执行操作。

文件存储

最后,Amazon Simple Storage Service (Amazon S3) 可使开发人员存储原始输入文件、结果、报告、构件和不想要直接存储在数据库中的任何其他内容。存储在 S3 中的项目可在线访问,使得与协作者分享资源变得容易,但它还提供精细的资源权限,从而仅限那些应当拥有它的人访问。

在 R 中开始使用 AWS

要在 R 中使用 AWS,您可以使用 Paws AWS 软件开发工具包,它是我的同事 Adam Banker 和我一起开发的 R 软件包。Paws 是非正式开发工具包,但它涵盖了与其他语言正式开发工具包相同的大多数功能。您还可以通过 botorreticulate 软件包使用正式的 Python 开发工具包 boto3,但您需要在使用它们之前确保 Python 已安装在您的计算机上。


接下来,我们来讨论如何通过 Paws 软件包使用 AWS。


要安装 Paws,请在 R 中运行以下命令:


Bash


   install.packages("paws")
复制代码


要使用 AWS 服务,您可以创建一个客户端并从该客户端访问服务的操作:


Bash
复制代码


   # Create an S3 client, then list the objects within my bucket `my-bucket`.   s3 <- paws::s3()   s3$list_objects(Bucket = "my-bucket")
复制代码


如果您使用 RStudio,其工具提示将向您显示可用的服务、每个服务的操作,并为每个操作显示各个参数的相关文档。下面是可用于 S3 的 put_object 操作的工具提示示例:


您在访问 AWS API 时必须提供凭证和区域。Paws 将使用 AWS 身份验证链搜索凭证和区域:


1.  显式提供的访问密钥、密钥、会话令牌、配置文件和/或区域2.  R 环境变量3.  操作系统环境变量4.  `.aws/credentials` 和 `.aws/config` 中 AWS 共享的凭证和配置文件5.  容器 [](https://amazonaws-china.com/iam/) 角色6.  实例 IAM 角色
复制代码


例如,如果您在 Amazon EC2 实例或附加有 IAM 角色的容器中运行 R 和 Paws,Paws 将自动获取 IAM 角色凭证来对 AWS API 请求进行身份验证;此功能部分在 AWS 开源计划的支持下开发。


我们可以通过使用如下环境变量为所有服务显式设置 AWS 凭证和区域:


Bash
复制代码


   # Set AWS security credentials globally.   Sys.setenv(       AWS_ACCESS_KEY_ID = my_access_key,       AWS_SECRET_ACCESS_KEY = my_secret_key,       AWS_REGION = my_region   )
复制代码


如果您需要为每个服务提供单独的凭证,您可以在为给定服务创建客户端时执行此操作。例如,如果您通过临时安全凭证使用另一个账户的 S3 存储桶,您可以将它们提供给 S3 客户端,如下所示:


Bash
复制代码


   # Connect to S3 using temporary security credentials.   s3_other <- paws::s3(       config = list(           credentials = list(               creds = list(                   access_key_id = my_access_key,                   secret_access_key = my_secret_key,                   session_token = my_token               )           ),           region = my_region       )   )
复制代码


您可以在 Paws 凭证文档中找到有关 AWS 凭证和 Paws 配置的更多详细信息。此外,遵照 AWS 保护 AWS 凭证的建议,包括:不要将密钥嵌入代码中,为不同应用程序使用不同的访问密钥。

连接到数据库

您可以通过设置到数据库的连接来在 R 中使用数据库。然后,您可以引用数据库中的表格,就好像它们是 R 中的数据集一样。此功能由 Tidyverse 中的 dplyr 软件包和 dbplyr 数据库后端提供。


Bash
复制代码


   # Connect to the database.   con <- DBI::dbConnect(       RPostgres::Postgres(),       host = "myhost", port = 5432, dbname = "mydb",       user = "david", password = password   )
# Create a reference to the table, query the database, and download the result. my_table <- table(con, "my_table") result <- my_table %>% filter(record_type == "ok") collect()
复制代码


如果您使用适当配置的 RDS 数据库,您可以使用 RDS 服务中的 Paws build_auth_token 函数生成的令牌进行身份验证;该功能是在 AWS 开源计划支持下开发的另一项功能。通过使用 IAM 身份验证令牌,您无需存储密码。一旦连接,您可以像以前一样使用此数据库连接。


Bash
复制代码


   # Connect to the database using an IAM authentication token.   rds <- paws::rds()   token <- rds$build_auth_token(endpoint, region, user)   con <- DBI::dbConnect(       RPostgres::Postgres(),       host = "myhost", port = 5432, dbname = "mydb",       user = "david", password = token   )
复制代码


使用这些软件包,您可以从 R 内轻松利用运行在 AWS 上的 AWS 资源和数据库。


在第 2 部分“使用 R 和 Amazon Web Services 进行文档分析”中,我们将向您演示如何通过在 AWS 上利用服务来使用这些软件包构建数据工作流,以将 PDF 转换为我们可以使用的数据。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/getting-started-with-r-on-amazon-web-services/


2020-04-05 08:00521

评论

发布
暂无评论
发现更多内容

Android-系统预设-App,有什么难的?

android 程序员 移动开发

Android-高级-UI-进阶之路-(五)-看完该篇文章-Canvas-你应该会了

android 程序员 移动开发

Android中关于Context的三言两语,源码强势分析带你了解Context!

android 程序员 移动开发

Android事件分发机制三:事件分发工作流程

android 程序员 移动开发

Android企业级实战-界面篇-2

android 程序员 移动开发

Android-音视频学习系列-(三)-Shell-脚本入门

android 程序员 移动开发

Android中自定义ViewGroup

android 程序员 移动开发

Android中自定义下拉样式Spinner

android 程序员 移动开发

Android仿QQ锁屏状态下消息提醒(震动+提示音)

android 程序员 移动开发

加速SaaS规模化演进,餐道基于K8s的云上创新底座

阿里巴巴云原生

阿里云 Kubernetes 云原生 SaaS 智慧餐饮

Android-音视频学习系列-(十)基于-FFmpeg-+-OpenSLES-实现音频万能播放器

android 程序员 移动开发

android之Fragment(官网资料翻译)

android 程序员 移动开发

Android使用ViewPager实现图片轮播系列之四:手动滑动 + 左右箭头 + 删除数据

android 程序员 移动开发

AndroidAPP启动速度优化;冷启动和热启动解析

android 程序员 移动开发

Android-kotlin的继承

android 程序员 移动开发

android下拉刷新——swipeRefresh的使用

android 程序员 移动开发

基于 Istio 的全链路灰度方案探索和实践

阿里巴巴云原生

阿里云 云原生 istio 灰度 全链路

Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器

android 程序员 移动开发

android下赚钱的几个方式

android 程序员 移动开发

Android与单片机---开发板---智能硬件---智能设备---数据协议--开发总结

android 程序员 移动开发

Android低版本上APP首次启动时间减少80%(一)

android 程序员 移动开发

Android-ContentProvider实例详解(1)

android 程序员 移动开发

Android-Handler机制详解

android 程序员 移动开发

Android-R-中的heap新分配器——Scudo

android 程序员 移动开发

Android-举一反三:12个View绘制流程高频面试题,带你全面理解View的绘制流程

android 程序员 移动开发

Android修炼系列(十二),自定义一个超顺滑的回弹RecyclerView

android 程序员 移动开发

Android-Volley完全解析(一),初识Volley的基本用法!

android 程序员 移动开发

Android-多渠道打包配置;你了解吗?

android 程序员 移动开发

Android-技术的下半场

android 程序员 移动开发

Android-自定义图像资源的使用(2)

android 程序员 移动开发

Android体系化进阶学习图谱:我们究竟还要学习哪些Android知识?(某大厂内部资料

android 程序员 移动开发

开始在 Amazon Web Services 上使用 R_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章