2017-10-11 32 views
0

ここではかなり新しいです。私は明確にしようとします。Amazon S3とBoto3からHDF5ファイルをダウンロードして読む

私はpytablesでhdf5ファイルを作成しました。私はそれをデータで埋めました。私はS3とストアから同じHDF5ファイルをダウンロードした

  • s3_client.upload_file(local_file_key, aws_bucket_name, aws_file_key)

: はその後、私はこのコードを使用してS3バケットに私のAWSクラスターのを/ tmp /ディレクトリからの私のファイルをアップロードしました

  • s3_client.download_file(aws_bucket_name, aws_file_key, another_local_file_key)
:それは再び私のAWSクラスターのを/ tmp /ディレクトリにこのコードを使用して

まで、問題はありません。問題は、アップロードしたファイルを読みたいときに表示されます。

  • 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' 

その後、私は私のクラスタのシェルでいくつかの検証を行いました。

[[email protected]_ip_address tmp$] file my_dataset.hdf5 

戻り

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

しかし[[email protected]_ip_address tmp$] file 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' 

誰かが私を助けてくれますか?

答えて

0

私の最初の推測は、ファイルがテキストモードで転送されたことです。 HDF5ファイルの署名は、そのような雑音を検出するように設計されています。

upload_file()の代わりにboto3のuploadfileobj()メソッドを使ってみましたか?前者は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を文書化されています。スーパーブロックの最初のフィールドに「Format Signature」と表示されている部分を少しスクロールしてください。

+0

こんにちは。回答ありがとうございます。私はこれを試したが、それは動作しません。 – newIn

関連する問題