Yuta NakataのBlog

Python / AWS / ITについて役立つ情報を発信します

LambdaでBoto3/Pandasを使うのをやめて、awswrangler(aws-sdk-pandas)を使いましょう

1. awswranglerってなに?

AWS上でのPandasを拡張したパッケージです。

データの読み込み・書き出し等の処理を簡単に提供してくれます。

個人的にユースケースとして、使いやすいと感じるのは、

Lambda上でのLayerが、AWS公式から提供されているため、公式のarnを指定するだけで使えることが魅力的だと感じています

どれぐらい簡単になるか、実際に見てましょう。

2. Boto3/Pandasではなく、awswranglerを使う実践的なコード

最も一般的なユースケースとして、

S3からデータを読み、Lambdaで計算処理をして書き出すプログラム

を書いてみましょう。

2-1. boto3/pandasを使う場合

import boto3
import pandas as pd

BUCKET_NAME = 'my-test-bucket'
OBJECT_NAME = 'hello.csv'
FILE_NAME = '/tmp/helllo.csv'
RESULT = '/tmp/result.csv'
Key = 'result.csv'

client = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')

df = pd.read_csv(FILE_NAME)

df.to_csv(RESULT)

client.upload_file(RESULT, BUCKET_NAME, Key)

となります。

ポイントは、

  • boto3を使って、一度ダウンロードしなければいけない
  • ダウンロードしたデータを読み込み、一度書き出さなければいけない
  • 書き出したデータをアップロードしなければいけない

これをawsranglerで書くとどうなりますでしょうか?

2-2. awswranglerを使う場合

import awswrangler as wr

BUCKET_NAME = 'my-test-bucket'
OBJECT_NAME = 'hello.csv'
Key = 'result.csv'

df = wr.s3.read_csv(f's3://{BUCKET_NAME}/{OBJECT_NAME}')

df.to_csv(f's3://{BUCKET_NAME}/{Key}')

です。とても簡素にかけて素晴らしいです。

awswranglerが内部的にboto3/pandasをラップしてくれているので、上記のような処理が実現できます。

3. なんでawswrangler?

上記のように、awswranglerを使うと簡単に書くことができ、また

AWS上でのインストールが簡単

だからです。

具体的には、

arn:aws:lambda::336392948345:layer:AWSSDKPandas-Python<python-version>:<layer-version>.

のような形でインストールを行います。

arnの一覧ページは下記を参照ください。

aws-sdk-pandas.readthedocs.io

4. 参考文献

aws-sdk-pandas.readthedocs.io