gpt4 book ai didi

python - 从 Amazon S3 和 Boto3 下载并读取 HDF5 文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:11 24 4
gpt4 key购买 nike

我是新来的。我会尽力说清楚。

我用 pytables 创建了一个 hdf5 文件,并在其中填充了数据。然后,我使用以下代码将文件从 aws 集群的/tmp/目录上传到 S3 存储桶:

  • s3_client.upload_file(local_file_key, aws_bucket_name, aws_file_key)

我已经从 S3 下载了相同的 hdf5 文件,并使用以下代码将其再次存储在我的 aws 集群的/tmp/目录中:

  • s3_client.download_file(aws_bucket_name, aws_file_key, another_local_file_key)

在那之前,没有任何问题。当我想读取上传的文件时出现问题。

  • tables.open_file(another_local_file_key)

 File "H5F.c", line 604, in H5Fopen
unable to open file
File "H5Fint.c", line 1087, in H5F_open
unable to read superblock
File "H5Fsuper.c", line 277, in H5F_super_read
file signature not found

End of HDF5 error back trace

Unable to open/create file '/tmp/from_aws_dataset.hdf5'

然后,我在集群的 shell 中进行了一些验证。

[user@cluster_ip_address tmp$] file my_dataset.hdf5

返回

 my_dataset.hdf5: Hierarchical Data Format (version 5) data

但是[user@cluster_ip_address tmp$] 文件 from_aws_dataset.hdf5 返回

 from_aws_dataset.hdf5: data

在我的 python 代码中,

tables.is_pytables_file('/tmp/from_aws_dataset.hdf5') 返回 None

boto3 version: '1.4.7', python version: 2.7, tables version: '3.4.2', h5py version: '2.7.1'

有人可以帮我吗?

最佳答案

我的第一个猜测是文件是以文本模式传输的。 HDF5 文件签名旨在检测此类修改。

您是否尝试过使用 boto3 的 uploadfileobj() 方法而不是 upload_file() ?看起来前者适用于 HDF5 等二进制文件。从 boto 文档中尚不清楚后者是否暗示文本。

with open("myfile.h5", "rb") as f:
s3.upload_fileobj(f, "bucket-name", "key-name")

看起来您还可以使用 put() 方法显式指定二进制传输,如下所示:

s3.Object('mybucket', 'myfile.h5').put(Body=open('/tmp/myfile.h5', 'rb'))

HDF5 文件签名已记录 here , 如果你感兴趣。只需向下滚动一点到 super block 的第一个字段,其中显示“格式签名”。

关于python - 从 Amazon S3 和 Boto3 下载并读取 HDF5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com