【问题标题】:Accessing files from Google cloud storage in RStudio在 RStudio 中访问 Google 云存储中的文件
【发布时间】:2019-01-24 15:02:53
【问题描述】:

我一直在尝试在 Google 云存储和 RStudio 服务器(我在 Google 云中创建的服务器)之间建立连接,以便我可以访问 R 中的文件以运行总和分析。 我在网络上找到了三种不同的方法,但到目前为止我还没有看到这些方法很清楚。

  1. 使用特定于文件的公共 URL 访问文件 [这不是我的选项]
  2. 将 Google 云存储作为光盘安装在 RStudio 服务器中,并像访问服务器中的任何其他文件一样访问它 [我看到有人发布了有关此方法的帖子,但在任何指南或材料上都找不到说明它是如何完成的]
  3. 使用 googleCloudStorageR 包获得对 Cloud Storage 存储分区的完全访问权限。

第 3 步看起来是非常标准的方法。但是当我尝试点击 gcs_auth() 命令时出现以下错误

gar_auto_auth 中的错误(required_scopes,new_user = new_user,no_auto = no_auto, : 无法验证 - options(googleAuthR.scopes.selected) 需要设置为 包括 https://www.googleapis.com/auth/devstorage.full_control 或 https://www.googleapis.com/auth/devstorage.read_writehttps://www.googleapis.com/auth/cloud-platform

有关如何使用此连接的指南可在以下位置找到 https://github.com/cloudyr/googleCloudStorageR 但它说它需要一个 service-auth.json 文件来设置环境变量以及所有其他密钥和密钥,但并没有具体说明这些到底是什么。

如果有人可以帮助我了解实际的设置方式,或者为我提供有关设置环境的指南,我将不胜感激。

谢谢。

【问题讨论】:

  • 似乎还有第三种方法可以使用 bigqueryR 包来做到这一点。只需在 R 中下载并加载 pacakge“bigqueryR”。然后运行命令 bqr_auth() 。这会生成 gcs_auth() 也可以用来授权的身份验证文件。

标签: r google-cloud-platform rstudio google-cloud-storage rstudio-server


【解决方案1】:

在使用谷歌云提供的任何服务之前,您必须附上您的卡。
所以,我假设您已经创建了帐户,创建帐户后转到 Console ,如果您还没有创建 Project 然后 Create Project ,然后点击侧边栏找到 APIs & Services > Credentials
那么,
1)创建服务帐户密钥将此文件保存为 json,您只能下载一次。
2)OAuth 2.0 客户端ID给出应用的名称并选择类型为Web应用并下载json文件。

现在对于存储转到侧边栏查找存储并单击它。
创建 Bucket 并给出 Bucket 的名称。
我已经在桶中添加了单个图像,您也可以添加用于代码目的。

让我们看看如何从存储中下载此图像以获取其他内容,您可以点击您提供的链接。

首先将环境文件创建为 .Renviron,以便它自动捕获 json 文件并将其保存在工作目录中。

In .Renviron file add those two downloaded json files like this
GCS_AUTH_FILE="serviceaccount.json"  
GAR_CLIENT_WEB_JSON="Oauthclient.json"

#R part
library(googleCloudStorageR)
library(googleAuthR)

gcs_auth()   # for authentication

#set the scope
gar_set_client(scopes = c("https://www.googleapis.com/auth/devstorage.read_write",
                      "https://www.googleapis.com/auth/cloud-platform"))    

gcs_get_bucket("you_bucket_name") #name of the bucket that you have created
gcs_global_bucket("you_bucket_name") #set it as global bucket
gcs_get_global_bucket() #check if your bucket is set as global,you should get your bucket name

objects <- gcs_list_objects()  # data from the bucket as list
names(objects)
gcs_get_object(objects$name[[1]], saveToDisk = "abc.jpeg")   #save the data 



**Note :**if you dont get json file loaded restart the session using .rs.restartR()
 and check the using 
Sys.getenv("GCS_AUTH_FILE")
Sys.getenv("GAR_CLIENT_WEB_JSON")
#it should show the files 

【讨论】:

  • 谢谢!这更清楚了,我无法通过查看可用说明将所有这些过程联系在一起。我会告诉你进展如何。
  • 很高兴它帮助了你!.:)
  • 谢谢你 - 我遵循了所有的代码 - 一切都运行良好 - 除了 # 设置范围块 - 运行 'gar_set_client(scopes = ...)' 返回以下错误:“错误:在 JSON 中找不到 $installed - 您下载了正确的 JSON 文件吗?(服务帐户客户端 > 桌面,而不是服务帐户密钥)”我通常不喜欢通过回复 cmets 来提问,但我认为我非常接近答案-因此不值得提出新问题。再次感谢您!
  • 嗨!我遇到了类似的问题:我按照说明操作直到 gcs_auth(),当浏览器窗口打开并且无法继续时,我仍然收到身份验证错误(错误 400:invalid_request Missing required parameter: client_id)。知道 client_id 是什么吗?谢谢!
【解决方案2】:

您可能需要 FUSE 适配器 - 这将允许您将 GCS 存储桶挂载为服务器上的目录。

  1. 在 R 服务器上安装 gcsfuse。
  2. 创建一个 mnt 目录。
  3. 运行 gcsfuse your-bucket /path/to/mnt

请注意,RW 性能与 FUSE 相比并不出色

完整文档

https://cloud.google.com/storage/docs/gcs-fuse

【讨论】:

  • 你可能想添加更多细节,目前它是一个“仅链接”的答案。
  • 谢谢!!我能够使用 Fuse 将云存储安装到 RStudio 服务器并读取文件!太好了,再次感谢 :) 对于 RW 性能,所以您是说当我想将文件从 GCS 读入 R 时会有一些延迟,对吗?我想一旦我将文件拉入 R 内存(执行类似 read.file 或 read.csv 之类的操作),那么它就完全取决于 R 服务器的内存如何执行进一步的操作。如果我错了,请告诉我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2013-09-10
相关资源
最近更新 更多