从AWS S3读取数据

时间:2019-12-20 19:41:05

标签: python amazon-s3 amazon-sagemaker

我有一些格式非常特殊的数据(例如NI系统生成的tdms文件),并将它们存储在S3存储桶中。通常,如果数据存储在本地计算机中,则要在python中读取此数据,我将使用npTDMS软件包。但是,当这些tdms文件存储在S3存储桶中时应如何读取?一种解决方案是将数据下载到EC2实例,然后使用npTDMS包将数据读入python。但这似乎不是一个完美的解决方案。有什么方法可以类似于从S3读取CSV文件那样读取数据?

3 个答案:

答案 0 :(得分:1)

某些Python程序包(例如Pandas)支持直接从S3读取数据,因为它是数据的最受欢迎位置。有关使用Pandas的方式的示例,请参见this question

如果软件包(npTDMS)不支持直接从S3读取,则应将数据复制到笔记本实例的本地磁盘上。

最简单的复制方法是在笔记本的单元格中运行AWS CLI

!aws s3 cp s3://bucket_name/path_to_your_data/ data/

此命令会将S3中“文件夹”下的所有文件复制到本地文件夹data

通过使用boto3丰富的功能过滤文件和其他特定要求,您可以使用更细粒度的副本。例如:

s3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
objs = bucket.objects.filter(Prefix='myprefix')
for obj in objs:
   obj.download_file(obj.key)

答案 1 :(得分:0)

import boto3
s3 = boto3.resource('s3')
bucketname = "your-bucket-name"
filename = "the file you want to read"
obj = s3.Object(bucketname, filename)
body = obj.get()['Body'].read()

答案 2 :(得分:0)

boto3 是默认选项,但是,作为替代,awswrangler 提供了一些不错的包装器。