最近、業務でデータ基盤の構築をしており、その中でETL処置のためにawswranglerというライブラリを使用することがあります。
これを使うとS3 <-> pandas.DataFrameなどのやりとりが非常に簡単に行えて便利です。
ただ、そのセットアップで表題のエラーが出ることがあったので簡潔にまとめておきます。
何が起きたか?
以下のようにpandasのDataFrameをawswanglerでS3にputしようとした際にエラーが発生しました。
import awswrangler as wr
path = "s3://hoge_bucket/hoge.parquet"
wr.s3.to_parquet(
df=df,
path=path,
)
型の問題なことはエラーからわかりますが、dfのtypeを調べてみても間違いなく<class 'pandas.core.frame.DataFrame'>でした。
原因
どうやらライブラリのバージョンの問題のようです。
- awswanglerが依存している
pyarrowが3系なら解決済み - pyarrowが2系かつnumpyが
1.20.xのだと起きる
どう解決したか?
上記から、以下どちらかが必要です。
- pyarrowを
3.0.0にアップグレード - numpyを
<1.20.0よりしたのバージョンにダウングレード
僕が業務でawswanglerを使用しようとしていたのはAWS MWAAにおいてだったため、numpyをダウングレードして解決しました。
※ ↓ いくつかのサービスではpyarrowが2系でないと使用できない、、、
⚠️ For platforms without PyArrow 3 support (e.g. EMR, Glue PySpark Job, MWAA):
➡️pip install pyarrow==2 awswrangler