【发布时间】:2018-01-18 10:46:37
【问题描述】:
我有一个使用 API 数据实时更新的 S3 存储桶。文件以 .XXX 格式保存,其中 xxx 为 1...n。
我的 R 脚本需要能够获取最新文件并将它们添加到分析数据框中。到目前为止,我一直在使用 aws.s3 包。设置环境密钥/访问密钥后:
mybucket <- get_bucket("mybucket1")
返回一个包含 1000 个元素(可能更多)的 s3 对象,看起来每个对象都有 Contents:list if 7,其中一个是 $LastModified。如何获取上次修改文件的名称?
Mybucket Large s3_bucket (1000 elements, 2.1Mb)
contents:List of 7
..$ Key : chr "folder1"
..$ LastModified: chr "2018-01-16T09:58:47.000Z"
..$ ETag : chr "\" nnnnnnnnnnn\""
etc (.. $Owner, $Storage class, $bucket, $-attr)
contents: List of 7
..$ Key : chr "folder1/file.1
..$ LastModified: chr "2018....etc"
..$ ETag : chr "...etc..."
etc....
contents: List of 7
etc.....
实际上是“文件”之后的数字。我需要的(在本例中为 1)。
经过实验,我认为通过 RCurl 使用 CLI 命令会是一个更好的选择。
aws s3 ls s3://mybucket --recursive | grep APIdata@symbol=XXX&interval=5.1*
这让我非常接近,但该命令省略了“&interval=5.1*”,因此它返回了所有带有“APIdata@symbol=XXX*”的对象
【问题讨论】:
-
请在您的问题中添加一些示例数据(例如前 n 个元素),以便我们更容易回答。谢谢 :-)
-
我更新了环境窗口中的描述。谢谢!
-
aws.s3 pkg 文档对回答您问题的数据类型不是很清楚。您能否将
dput(Mybucket[1:3])的输出添加到问题中(但请先匿名内容!)因为我需要知道确切的数据类型和属性才能回答您的问题。但是:基本上它看起来像是将所有内容转换为 data.frame,转换 LastModifiedDate,对其进行排序并获取最后一个条目...... -
它们都是 JSON 文件,扩展名范围为 .1,.2,.3.....x。我特别试图避免将 30,000 个文件的整个文件列表调用到 R 中,并试图将其限制为 .1*,因为这会给我 0.1、0.10-19、0.100-199 以及所有数千个范围。
-
尽量减少网络流量是个好主意,请务必在您的问题中提及此类非功能性需求以获得准确答案。我认为您需要在服务器端有一个 shell 脚本来过滤最新的文件,这不是 R 问题,但这确实为您提供了
get_bucket提供的所有其他信息
标签: r amazon-web-services amazon-s3