LoginSignup
4
0

More than 1 year has passed since last update.

Glue Jobでpandas has no attribute 'json_normalize'に四苦八苦した

Last updated at Posted at 2021-11-11

前提(長くて説明下手です)

ETL処理をGlue jobを用いて、自動化しようとしたときに

import pandas
from pandas.io.json  import json_normalize
df = pandas.json_normalize()
#~ 中略 ~ 

というように処理をGlueスクリプトに書いていたが、jobを実行してみるとエラーログには何も書かれておらず、module 'pandas' has no attribute 'json_normalize'というログのみ書かれていた。

またjobのstatusは、「Succeeded」になっているが、肝心のcsvファイルはs3にアップロードされていない。
この時初めて知ったのだが、json_normalizeはpandasのversion >= '1.0.0'で実装されており、Glueでのpandasのversionを確認したところ、0.~であり、1.0.0より前のversionだった。

Glue スクリプトでは、pipを叩くことはできないので、外部モジュールとして「pandas >= 1.0.0」を取り入れる必要がある。
ここまでが前提のお話

目次

  1. setupスクリプトについて
  2. wheelファイルの作成
  3. ライブラリパスの通し方
  4. 参考文献


#setupスクリプトについて
setup.pyファイルについて

from setuptools import setup

NAME = 'test_wheel'
DESCRIPTION = 'for test'
REQUIRES_PYTHON = '~=3.6.0'
VERSION = '0.0.0'
REQUIRED = [#特別に必要なモジュールをversion指定でimportするため
    'pandas >= 1.1.0',
]

setup(
    name=NAME,#パッケージ名
    version=VERSION,
    #install_requires=["packageA", "packageB"],
    python_requires = REQUIRES_PYTHON,
    #extras_require={}
    #entry_points={}
)

今回はNAME,DESCRIPTION,REQUIRES_PYTHON,VERSION,REQUIREDでsetup内の引数を指定した。
ほかにも引数は多くあるみたいだけれど、今回は使わないので説明はしないです。
気になる方は、
setupスクリプトを書く
を参照していただけたらなと思います。


#wheelファイルの作成
setup.pyから.whlファイルの作成
先程、setup.pyファイルを作成したので、次にwheelファイルを作成します

$ python3 setup.py bdist_wheel

上記をターミナルで実行すると、以下のディレクトリ構造の形でファイルが生成されます

.
├── setup.py
├── build
│   └── build~
├── dist
│   └── {NAME}.whl
└── {NAME}.egg-info
    └── 5つくらいのファイル(今回は省略)

今回使うのは、distフォルダの
{NAME}.whl
になります


#ライブラリパスの通し方
先程、wheelファイルを作成しましたが、これをどうGlue jobに適用するの?という話をします
1.S3にwheelファイルをアップロードする
2.Glue job詳細のPythonライブラリパスの部分にwheelファイルのS3 URIを貼り付ける
上記の2点を行った後にGlueスクリプトを実行すれば良い。

参考文献

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0