使用 AWS boto3 读取 h5 文件
Read h5 file using AWS boto3
我正在尝试使用 boto3 从 AWS S3 读取 h5 文件。
client = boto3.client('s3',key ='key')
result = client.get_object(Bucket='bucket', Key='file')
with h5py.File(result['Body'], 'r') as f:
data = f
TypeError:应为 str、bytes 或 os.PathLike 对象,而不是 StreamingBody
有什么想法吗?
h5py版本为2.10,boto3版本为1.7.58
同样的问题是 here,但没有答案...
h5py.File()
命令需要磁盘上本地文件的路径。但是,您正在向它传递内存中的数据。
您可以下载文件:
import boto3
s3_client = boto3.client('s3')
s3_client.download_file('bucket', 'key', 'filename')
with h5py.File('filename', 'r') as f:
data = f
使用临时文件进行临时存储的可行解决方案。
这会将您的 s3 存储桶中的模型数据流式传输到临时存储并将其设置为变量。
import tempfile
from keras import models
import boto3
# Creating the low level functional client
client = boto3.client(
's3',
aws_access_key_id = 'ACCESS_KEY_ID',
aws_secret_access_key = 'ACCESS_SECRET_KEY',
region_name = 'us-east-1'
)
# Create the S3 object
response_data = client.get_object(
Bucket = 'bucket-name',
Key = 'model/model.h5'
)
model_name='model.h5'
response_data=response_data['Body']
response_data=response_data.read()
#save byte file to temp storage
with tempfile.TemporaryDirectory() as tempdir:
with open(f"{tempdir}/{model_name}", 'wb') as my_data_file:
my_data_file.write(response_data)
#load byte file from temp storage into variable
gotten_model=models.load_model(f"{tempdir}/{model_name}")
print(gotten_model.summary())
我正在尝试使用 boto3 从 AWS S3 读取 h5 文件。
client = boto3.client('s3',key ='key')
result = client.get_object(Bucket='bucket', Key='file')
with h5py.File(result['Body'], 'r') as f:
data = f
TypeError:应为 str、bytes 或 os.PathLike 对象,而不是 StreamingBody
有什么想法吗?
h5py版本为2.10,boto3版本为1.7.58
同样的问题是 here,但没有答案...
h5py.File()
命令需要磁盘上本地文件的路径。但是,您正在向它传递内存中的数据。
您可以下载文件:
import boto3
s3_client = boto3.client('s3')
s3_client.download_file('bucket', 'key', 'filename')
with h5py.File('filename', 'r') as f:
data = f
使用临时文件进行临时存储的可行解决方案。 这会将您的 s3 存储桶中的模型数据流式传输到临时存储并将其设置为变量。
import tempfile
from keras import models
import boto3
# Creating the low level functional client
client = boto3.client(
's3',
aws_access_key_id = 'ACCESS_KEY_ID',
aws_secret_access_key = 'ACCESS_SECRET_KEY',
region_name = 'us-east-1'
)
# Create the S3 object
response_data = client.get_object(
Bucket = 'bucket-name',
Key = 'model/model.h5'
)
model_name='model.h5'
response_data=response_data['Body']
response_data=response_data.read()
#save byte file to temp storage
with tempfile.TemporaryDirectory() as tempdir:
with open(f"{tempdir}/{model_name}", 'wb') as my_data_file:
my_data_file.write(response_data)
#load byte file from temp storage into variable
gotten_model=models.load_model(f"{tempdir}/{model_name}")
print(gotten_model.summary())