在python中从S3加载npy文件

时间:2016-11-15 11:08:05

标签: python numpy amazon-s3

无论如何

是否在numpy中加载/读取外部文件(即AWS S3)?我在S3中存储了几个npy文件。我试图通过S3预先签名的URL访问它们,但似乎numpy.load方法或np.genfromtxt都无法读取它们。

我不想在本地文件系统上保存文件,然后将它们加载到numpy上。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我使用boto和StringIO取得了成功。 使用boto连接到S3并获取您的存储桶。然后使用以下代码将文件读入numpy:

  import numpy as np
  from StringIO import StringIO
  key=bucket.get_key('YOUR_KEY')
  data_string=StringIO(key.get_contents_as_string())
  data = np.load(data_string)

我不确定这是最有效的方式,但它不需要公共网址。

干杯, 迈克尔

答案 1 :(得分:1)

使用s3fs

notifications.forEach((payload, i) => {
    let n = new Notification('My Notification', {
        body: `${payload.body}`
    });
});

您可能必须根据要读取的文件设置import numpy as np from s3fs.core import S3FileSystem s3 = S3FileSystem() key = 'your_file.npy' bucket = 'your_bucket' df = np.load(s3.open('{}/{}'.format(bucket, key)))

答案 2 :(得分:0)

我比较了s3fs和io.BytesIO从s3加载28G npz文件。 s3fs需要30分钟,而io需要12分钟。

obj = s3_session.resource("s3").Object(bucket, key)
with io.BytesIO(obj.get()["Body"].read()) as f:
    f.seek(0)  # rewind the file
    X, y = np.load(f).values()
s3fs = S3FileSystem()
with s3fs.open(f"s3://{bucket}/{key}") as s3file:
     X, y = np.load(s3file).values()