numpy array を aws s3 に格納する。
背景
jupyter notebook を使っていて、データをローカルのファイルシステムに保存するようにしていると、 環境が変わったときにそのデータまで一緒に持ってこないといけないが、これは jupyter の利便性を失う一つの要因となる。 例えば github でjupyter notebook を管理する場合、ローカルにあるデータのファイルまで github 上に格納しなければならない。 google Colaboratory を使う場合、クラウド上で実行されるので、そのローカルにはデータは存在しない。
長々と書いてしまったが、要は、クラウド上に保存し、クラウドからローカルに落とせばよいのである。
あまり単純な例がない、numpy array を aws s3 に格納する例を書いておきたい。
numpy array を aws s3 に save し、load する例
import os import boto3 os.environ["AWS_ACCESS_KEY_ID"] = "AAAAAAAAAAAAAAA" os.environ["AWS_SECRET_ACCESS_KEY"] = "XXXXXXXXXXXXXXXXXXXXXXX" s3 = boto3.resource('s3')
# 書き込み import numpy as np import tempfile a = np.array([1,2,3,4,5,6]) with tempfile.TemporaryFile() as temp: np.save(temp, a) temp.seek(0) res = s3.Object(bucket_name="your-bucket", key="aaa.npy").upload_fileobj(temp)
# 読み込み import tempfile with tempfile.TemporaryFile() as temp: res = s3.Object(bucket_name="your-bucket", key="aaa.npy").download_fileobj(temp) temp.seek(0) aa = np.load(temp)
temp.seek(0)
は temp
ファイルオブジェクトに書き込まれたデータを先頭から読み直すために、rewind している。
Webをみると、boto3 でなく boto を使った方法などいろいろ紹介されているが boto を使った方法はうまく動かなかった。
ちなみに、上記は、google colaboratory を使って確認した。
まとまりが悪いが、これにて。