3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonを使ってDataFrameをAmazon S3に直接アップロードする

Posted at

はじめに

Pythonを使ってAmazon S3にファイルをアップロードするでは、Python 用 AWS SDK である Boto3 を用いて Amazon S3 へのファイルアップロードを行った。この際、保存されているファイルのパスを指定していたが、ローカルにファイルを残したくない場合や準リアルタイムに結果を送りたい場合、ファイルを一度保存してそのパスを指定するのは望ましくない。本記事では、Python でよく用いられる DataFrame 形式のデータを CSV ファイルとして保存することなく一時ファイルのままで Amazon S3 へアップロードすることを試みた。S3.Client.upload_fileobj を参考にした。

S3 へファイルオブジェクトをアップロード

以下コードでファイルオブジェクトを Amazon S3 へアップロードできる。Boto3 のインストールや AWS API キーの準備、Amazon S3 へのアクセスは Pythonを使ってAmazon S3にファイルをアップロードするを参照。

upload_fileobj.py
import boto3
import tempfile

def upload_to_s3(fileobj, Bucket, Key):
    client = boto3.client('s3')

    with tempfile.NamedTemporaryFile() as tf:
        with open(tf.name, 'w+') as f:
            f.write(fileobj)
        client.upload_fileobj(tf, Bucket, Key)

df = pd.DataFrame({'name': ['Raphael', 'Donatello'],
                   'mask': ['red', 'purple'],
                   'weapon': ['sai', 'bo staff']})
fileobj = df.to_csv()
Bucket = 'my-bucket'
Key = 'result/result.csv'
upload_to_s3(file_obj, Bucket, Key)

おわりに

DataFrame をファイルとして保存することなく Amazon S3 に送ることができた。以前書いたFastAPI で作成した Web API にて、リクエストボディのデータを DataFrame に直接入れる機械学習モデルの推論結果を返す Web API を FastAPI で作成と合わせることで、POST リクエストで受け取ったデータをそのまま DataFrame として読み込み、学習済みモデルで予測を行い、その予測結果である DataFrame を Amazon S3 へ送るといった一連の流れが構成できる。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?