我想使用data.table
包中的fread
函数从S3读取CSV文件,代码如下:
ulr_with_signature <- signURL(url, access_key, secret_key)
DT <- fread(ulr_with_signature)
有没有可以让我使用访问/秘钥对构建URL的包或代码。
我不想使用awscli
来读取数据。
我想使用data.table
包中的fread
函数从S3读取CSV文件,代码如下:
ulr_with_signature <- signURL(url, access_key, secret_key)
DT <- fread(ulr_with_signature)
有没有可以让我使用访问/秘钥对构建URL的包或代码。
我不想使用awscli
来读取数据。
# These variables should be set in your environment, but you could set them in R:
Sys.setenv("AWS_ACCESS_KEY_ID" = "mykey",
"AWS_SECRET_ACCESS_KEY" = "mysecretkey",
"AWS_DEFAULT_REGION" = "us-east-1")
library("aws.s3")
obj
的R对象,想要保存到AWS上并稍后读取:s3save(obj, bucket = "my_bucket", object = "object")
# and then later
obj <- s3load("object", bucket = "my_bucket")
显然,将存储桶名称和文件名(AWS存储桶中对象的名称)替换为实际值。该包还有一个相应的s3save
函数。您也可以使用s3saveRDS
和s3readRDS
以RDS格式保存和加载。
如果您需要读取文本文件,则稍微复杂一些,因为库的函数“get_object”返回一个原始向量,我们必须自己解析它:
raw_data <- get_object('data.csv', 'my_bucket')
# this method to parse the data is copied from the httr library
# substitute encoding from as needed
data <- iconv(readBin(raw_data, character()), from="UTF-8", to="UTF-8")
# now the data can be read by any R function, eg.
read.csv(data)
fread(data)
# All this can be done without temporary objects:
fread(iconv(
readBin(get_object('data.csv', 'my_bucket'), character()),
from="UTF-8", to="UTF-8"))
s3load
调用 get_object
(这里不会创建文件),get_object
调用 s3HTTP
,仍然没有本地文件,该函数调用 httr
包中的 GET 方法。我看不到 awscli
的任何地方。 - pusillanimoussignature_v4_auth
方法创建)作为 头部 与 GET 请求一起发送来实现的。因此,请求看起来像这样(不完全相同,但重点很清楚):GET /bucket/filename; Authentication: AUTH TOKEN HERE
。您的想法存在问题,即 URL 与身份验证令牌是分开的,无法作为单个对象存储。(对格式造成的困扰深感抱歉) - pusillanimousError in fread(get_object(my_url, my_bucket)) : 'input' 必须是单个字符字符串,包含文件名、命令、文件的完整路径、以 'http[s]://', 'ftp[s]://' 或 'file://' 开头的 URL,或输入数据本身
- Bulatget_object
返回的是一个原始向量,而不是字符向量或连接。你可以这样做,尽管有点复杂:fread(iconv(readBin(get_object(url, bucket), character()), from = "UTF-8", to = "UTF-8"))
(将from="UTF-8"替换为适当的编码)。 - pusillanimousaws.s3
包来实现以下功能:data <- s3read_using(FUN = data.table::fread,
bucket = "my_bucket",
object = "path/to/file.csv")