最近、業務でデータ基盤の構築をしており、その中で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