从 AWS S3 读取数据

Reading Data from AWS S3

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

一些 Python 包(例如 Pandas)支持直接从 S3 读取数据,因为它是最流行的数据存储位置。有关使用 Pandas.

执行此操作的示例,请参见 this question

如果包(npTDMS)不支持直接从S3读取,您应该将数据复制到notebook实例的本地磁盘。

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

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

此命令会将S3中"folder"下的所有文件复制到本地文件夹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)
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()

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