- awswrangler(aws-sdk-pandas)ってなに?
- よくあるサンプルコード
- その1 : boto3/pandasを使う場合
- その2:awswranglerを使うと読み書きが簡略化できる
- その他、よく使いそうな関数
- awswranglerのメリットとしてARNが提供されている
awswrangler(aws-sdk-pandas)ってなに?
AWSの各種サービスとの統合を簡単に行ってくれるパッケージです。
Athena, Glue, Redshift, Timestream, OpenSearch, Neptune, QuickSight, Chime, CloudWatchLogs, DynamoDB, EMR, SecretManager, PostgreSQL, MySQL, SQLServer and S3 (Parquet, CSV, JSON and EXCEL)
等、各種AWSサービスに対応しています。

Githubのリンクはコチラ
個人的にいい体験だなと感じるユースケースとしては
Lambda Layerが提供されているため、ARNを指定するだけで使えることが魅力的だと感じています
どれぐらい簡単になるか、実際に見てましょう。
よくあるサンプルコード
最も一般的なユースケースとして、
S3からデータを読み、Lambdaで計算処理をして書き出すプログラム
を書いてみましょう。
その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') # boto3.clientのインスタンスを立てる s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME') # S3からデータをダウンロード df = pd.read_csv(FILE_NAME) # データの読み込み df.to_csv(RESULT) # データの書き出し client.upload_file(RESULT, BUCKET_NAME, Key) # S3へのアップロード
となります。
ポイントは、
- boto3を使って、一度ダウンロードしなければいけない
- ダウンロードしたデータを読み込み、一度書き出さなければいけない
- 書き出したデータをアップロードしなければいけない
これをawsranglerで書くとどうなりますでしょうか?
また、この実装をLambdaで実現する場合、Lambdaのストレージ領域として/tmp/以下しか使えません。
lambdaに不慣れな場合、この操作でまずはつまずくことも予想されます。
ちなみに、Lambdaをローカルで実行する方法については、下記で解説しています。
その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}') # S3から直接データを読んでくれる df.to_csv(f's3://{BUCKET_NAME}/{Key}') # S3に直接データを書き出せる
です。とても簡素にかけて素晴らしいです。
awswranglerが内部的にboto3/pandasをラップしてくれているので、上記のような処理が実現できます。
そもそも、LambdaやPandasのパフォーマンス性能を上げたい!って場合は下記の記事を参考にしてみてください。
その他、よく使いそうな関数
excelファイルの読み込み
import awswrangler as wr df = wr.s3.read_excel('s3://bucket/key.xlsx')
jsonの読み込み
import awswrangler as wr df = wr.s3.read_json(path='s3://bucket/prefix/')
ダウンロード
import awswrangler as wr wr.s3.download(path='s3://bucket/key', local_file='./key')
書き出し
import awswrangler as wr wr.s3.upload(local_file='./key', path='s3://bucket/key')
オブジェクトのlist表記
import awswrangler as wr wr.s3.list_objects('s3://bucket/prefix') ['s3://bucket/prefix0', 's3://bucket/prefix1', 's3://bucket/prefix2']
awswranglerのメリットとしてARNが提供されている
上記のように、awswranglerを使うと簡単に書くことができ、また
AWS上でのインストールが簡単
だからです。
具体的には、
arn:aws:lambda:
:336392948345:layer:AWSSDKPandas-Python<python-version>:<layer-version>.
のような形でインストールを行います。
arnの一覧ページは下記を参照ください。
通常、サードパーティ製のライブラリを使う場合は、
- zipファイル化してLayerとして展開
- lambda containerを用いて、コンテナ化
等、そもそもサードパーティ製のライブラリを使うための準備に一苦労します。
どうしても、サードパーティ製のライブラリを爆速で使いたい場合、下記を参照ください