■ はじめに
AWS Glue の Python shell で、Excelを扱おうとしたが、 はまったので、メモ。 PySpark (Glue 2.0) での Excel の扱いは、以下の関連記事を参照のこと。
AWS Glue ~ Excelを扱うには / PySpark (Glue2.0) 版 ~
https://dk521123.hatenablog.com/entry/2020/10/09/144520
■ 問題内容
前提知識:Python / PandasによるExcelの扱いについて
https://dk521123.hatenablog.com/entry/2019/11/05/221010
で触れたが、「「xlrd / xlwt」が必要」
問題詳細
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job-python.html#python-shell-supported-library
より抜粋 ~~~~ Python シェルジョブを実行する環境は、次のライブラリをサポートしています。 pandas (python setuptools 設定である setup.py を使用してインストールする必要があります) ~~~~ っという訳で、「xlrd / xlwt」は入っていないので、 そのまま実装すると、エラーになる(以下の「エラー内容」を参照) ただ、AWS Glueに、xlrd をインストールする訳にはいかないので、、、
エラー内容
Install xlrd >= 1.0.0 for Excel support
解決案
詳細手順
[1] 以下のサイトからWheelファイルをダウンロードし、S3内に格納しておく ⇒ 今回は、「xlrd-1.2.0-py2.py3-none-any.whl」
https://pypi.org/project/xlrd/
[2] AWS Glue コンソールの [ジョブプロパティ] ページで、 [Python ライブラリパス] ボックスに[1]の ファイルへのパスを指定する
■ サンプル
Excel => CSV変換
import io import pandas as pd import boto3 s3_client = boto3.client('s3') response = s3_client.get_object(Bucket='bucket-name', Key="sample.xlsx") data_frame = pd.read_excel(io.BytesIO(response['Body'].read()), encoding='utf-8') out = io.BytesIO() data_frame.to_csv(out, index=False) s3_client.put_object(Bucket='bucket-name', Key="sample.csv", Body=out)
関連記事
AWS Glue ~ Excelを扱うには / PySpark (Glue2.0) 版 ~
https://dk521123.hatenablog.com/entry/2020/10/09/144520
AWS Glue のトラブルシューティング
https://dk521123.hatenablog.com/entry/2019/10/25/232155
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
パッケージ管理 ~ wheel / egg ~
https://dk521123.hatenablog.com/entry/2019/11/09/001342
Python で Excel を扱うには
https://dk521123.hatenablog.com/entry/2019/11/05/221010
Amazon S3 ~ Python boto3でS3を操作する ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004