HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

开始在 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:00637

评论

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

JVM中unsafe.cpp源码

Darren

c++ 源码 JVM unsafe

一条龙!CI / CD 、打造小团队前端工程化服务

久违

Vue 大前端 jenkins React

高效程序员的45个习惯:敏捷开发修炼之道(7)

石云升

敏捷开发 晨会

鲲鹏迁移第一批吃螃蟹的人,践行技术国际化

华为云开发者联盟

鲲鹏920 服务器 华为云 ARM芯片 X86

35K成功上岸华为商城事业部,只因学透了这几个开源的商城项目

Java迁哥

Java 华为 源码 资料 商城项目

week12 homework

burner

java安全编码指南之:Mutability可变性

程序那些事

Java java安全编码 编码指南 可变性

Java创建对象的方法有哪些?

古月木易

Java

实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步

华为云开发者联盟

迁移 灾备 数据复制 云连接 数据同步

Java中强、软、弱、虚四种引用详解

古月木易

Java

【API进阶之路】破圈,用一个API代替10人内容团队

华为云开发者联盟

内容 编辑 API 华为云 文本摘要

ArCall远比你想象的要强大的多

anyRTC开发者

WebRTC 在线教育 直播 RTC 安卓

架构设计复杂度来源

escray

学习 从零开始学架构 架构师预科班

程序员如何获取一份高薪工作?阿里P8大牛给你一些中肯的建议

Java迁哥

Java 华为 程序员 面试 资料

Docker 网络模式详解及容器间网络通信

哈喽沃德先生

Docker 容器 微服务

【运维探讨】RPA落地实践,提升IT运维工作效能!

嘉为蓝鲸

RPA 运维自动化 标准化 系统运维 流程

9块钱,构建个私有网盘,关键不限速

华为云开发者联盟

网站 OBS 在线网盘 华为云 云存储

面经手册 · 第9篇《队列是什么?什么是双端队列、延迟对列、阻塞队列,全是知识盲区!》

小傅哥

数据结构 小傅哥 队列 ArrayDeque

2019年我最喜欢的三款数码产品。

徐说科技

手机 苹果

JDK8 Unsafe.java 源码

Darren

源码 并发 CAS 代码注释 unsafe

vivo商城前端架构升级-总览篇

vivo互联网技术

node.js Vue 大前端 架构设计

Java创建对象的方法有哪些?

奈学教育

Java

Java中强、软、弱、虚四种引用详解

奈学教育

Java

分析HiveQL 生成的MapReduce执行程序

任小龙

区块链支付系统源码开发,USDT承兑支付平台

13530558032

CPU中的程序是怎么运行起来的(预告篇)

良知犹存

cpu

拥抱K8S系列-01-CentOS7安装docker

张无忌

Docker centos 运维

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Java 阿里巴巴 程序员 成长 笔记

花两个半月吃透这份Java手打面经,成功从外包上岸到京东

Java迁哥

Java 学习 腾讯 面试 资料

LeetCode题解:84. 柱状图中最大的矩形,双循环暴力,JavaScript,详细注释

Lee Chen

大前端 LeetCode

区块链交易所开发源码,数字货币交易所app开发

13530558032

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