AWS Glue での Python ライブラリの使用 - AWS Glue

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Glue での Python ライブラリの使用

AWS GlueAWS Glue ETL で使用するためのPythonモジュールやライブラリを追加でインストールすることができます。

AWS Glue 2.0 の pip を使用した追加 Python モジュールのインストール

AWS Glue では、Python Package Installer (pip3) を使用して、AWS Glue ETL で使用するモジュールを追加でインストールします。--additional-python-modules パラメータでコンマ区切りの Python モジュールのリストを指定することで、新しいモジュールを追加したり、既存のモジュールのバージョンを変更したりできます。Amazon S3 にディストリビューションをアップロードすることでライブラリのカスタムディストリビューションをインストールできます。その後で、モジュールのリストに Amazon S3 オブジェクトへのパスを含めます。

--python-modules-installer-option パラメータを使用すると、pip3 に追加オプションを渡すことができます。例えば "--upgrade" を渡すことで、"--additional-python-modules" で指定されたパッケージをアップグレードできます。その他の例については、「 AWS Glue 2.0 を使用して Spark ETL ワークロードのホイールから Python モジュールを構築する」を参照してください。

Python の依存関係がネイティブのコンパイル済みコードに推移的に依存している場合、 AWS Glue はジョブ環境でのネイティブコードのコンパイルをサポートしていません。ただし、 AWS Glue ジョブは Amazon Linux 2 環境内で実行されます。ディストリビューション版 Wheel を通じて、ネイティブの依存関係をコンパイルされた形式で提供できる場合があります。

例えば、更新したり新しい scikit-learn モジュールを追加したりするには、"--additional-python-modules", "scikit-learn==0.21.3" のキー/値を使用します。

また、--additional-python-modules オプションの中で、Python ホイールモジュールへの Amazon S3 パスを指定できます。例:

--additional-python-modules s3://aws-glue-native-spark/tests/j4.2/ephem-3.7.7.1-cp37-cp37m-linux_x86_64.whl,s3://aws-glue-native-spark/tests/j4.2/fbprophet-0.6-py3-none-any.whl,scikit-learn==0.21.3

AWS Glue コンソールのジョブパラメータフィールド--additional-python-modulesで を指定するか、 AWS SDK のジョブ引数を変更します。ジョブパラメータの設定については、「AWS Glue ジョブのパラメータ」を参照してください。

PySpark ネイティブ機能を持つ Python ファイルを含める

AWS Glue は PySpark を使用して AWS Glue ETL ジョブに Python ファイルを含めます。可能な場合には、依存関係を管理するために、--additional-python-modules を使用することが必要になります。Python ファイルをインクルードするには、--extra-py-files ジョブパラメータを使用します。依存関係は Amazon S3 でホストされている必要があり、引数の値は、スペースを含まない Amazon S3 パスのカンマ区切りリストである必要があります。この機能は、Spark で使用する Python の依存関係管理のように動作します。Spark での Python 依存関係管理の詳細については、Apache Spark ドキュメントの PySpark 「ネイティブ機能の使用」ページを参照してください。 --extra-py-filesは、追加のコードがパッケージ化されていない場合や、依存関係を管理するために既存のツールチェーンで Spark プログラムを移行する場合に役立ちます。依存関係ツールをメンテナンス可能にするには、送信する前に依存関係をバンドルする必要があります。

ビジュアル変換を使用するプログラミングスクリプト

AWS Glue Studio ビジュアルインターフェイスを使用して AWS Glue ジョブを作成する場合、マネージドデータ変換ノードとカスタムビジュアル変換を使用してデータを変換できます。マネージドデータ変換ノードの詳細については、「」を参照してくださいAWS Glue マネージドデータ変換ノードの編集。カスタムビジュアル変換の詳細については、「」を参照してくださいAWS Glue カスタムビジュアル変換 。ビジュアル変換を使用するスクリプトは、ジョブ言語が Python を使用するように設定されている場合にのみ生成できます。

ビジュアル変換を使用して AWS Glue ジョブを生成する場合、 AWS Glue Studio は、ジョブ設定の --extra-py-filesパラメータを使用して、これらの変換をランタイム環境に含めます。ジョブパラメータについては、「AWS Glue ジョブのパラメータ」を参照してください。生成されたスクリプトまたはランタイム環境を変更する場合、スクリプトを正常に実行するには、このジョブ設定を保持する必要があります。

AWS Glue で提供済みの Python モジュール

これらの提供済みモジュールのバージョンを変更するには、--additional-python-modules ジョブパラメータにより新しいバージョンを指定します。

AWS Glue version 2.0

AWS Glue バージョン 2.0 には、すぐに使用できる次の Python モジュールが含まれています。

  • avro-python3==1.10.0

  • awscli==1.27.60

  • boto3==1.12.4

  • botocore==1.15.4

  • certifi==2019.11.28

  • chardet==3.0.4

  • click==8.1.3

  • colorama==0.4.4

  • cycler==0.10.0

  • Cython==0.29.15

  • docutils==0.15.2

  • enum34==1.1.9

  • fsspec==0.6.2

  • idna==2.9

  • importlib-metadata==6.0.0

  • jmespath==0.9.4

  • joblib==0.14.1

  • kiwisolver==1.1.0

  • matplotlib==3.1.3

  • mpmath==1.1.0

  • nltk==3.5

  • numpy==1.18.1

  • pandas==1.0.1

  • patsy==0.5.1

  • pmdarima==1.5.3

  • ptvsd==4.3.2

  • pyarrow==0.16.0

  • pyasn1==0.4.8

  • pydevd==1.9.0

  • pyhocon==0.3.54

  • PyMySQL==0.9.3

  • pyparsing==2.4.6

  • python-dateutil==2.8.1

  • pytz==2019.3

  • PyYAML==5.3.1

  • regex==2022.10.31

  • requests==2.23.0

  • rsa==4.7.2

  • s3fs==0.4.0

  • s3transfer==0.3.3

  • scikit-learn==0.22.1

  • scipy==1.4.1

  • setuptools==45.2.0

  • six==1.14.0

  • Spark==1.0

  • statsmodels==0.11.1

  • subprocess32==3.5.4

  • sympy==1.5.1

  • tbats==1.0.9

  • tqdm==4.64.1

  • typing-extensions==4.4.0

  • urllib3==1.25.8

  • wheel==0.35.1

  • zipp==3.12.0

AWS Glue バージョン 3.0

AWS Glue バージョン 3.0 には、すぐに使用できる次の Python モジュールが含まれています。

  • aiobotocore==1.4.2

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.18.50

  • botocore==1.21.50

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.4

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==6.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kiwisolver==1.3.2

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.6.3

  • numpy==1.19.5

  • packaging==23.0

  • pandas==1.3.2

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0

  • pmdarima==1.8.2

  • ptvsd==4.3.2

  • pyarrow==5.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMySQL==1.0.2

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==5.4.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2021.8.1

  • s3transfer==0.5.0

  • scikit-learn==0.24.2

  • scipy==1.7.1

  • six==1.16.0

  • Spark==1.0

  • statsmodels==0.12.2

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.12.0

AWS Glue バージョン 4.0

AWS Glue バージョン 4.0 には、すぐに使用できる次の Python モジュールが含まれています。

  • aiobotocore==2.4.1

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.24.70

  • botocore==1.27.59

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.32

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==5.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kaleTAK==0.2.1

  • kiwisolver==1.4.4

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.7

  • numpy==1.23.5

  • packaging==23.0

  • pandas==1.5.1

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0.1

  • plotly==5.16.0

  • pmdarima==2.0.1

  • ptvsd==4.3.2

  • pyarrow==10.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMySQL==1.0.2

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==6.0.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2022.11.0

  • s3transfer==0.6.0

  • scikit-learn==0.24.2

  • scipy==1.9.3

  • setuptools==49.1.3

  • six==1.16.0

  • statsmodels==0.13.5

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.10.0

取り込みのためのライブラリの圧縮

ライブラリは、単一の .py ファイルに含まれていない限り、.zip アーカイブにパッケージ化される必要があります。パッケージディレクトリは、アーカイブのルートにあって、パッケージの __init__.py ファイルを含んでいる必要があります。そうすると、Python は通常の方法でパッケージをインポートできるようになります。

ライブラリが 1 つの .py ファイルにある単一の Python モジュールでのみ構成されている場合、.zip ファイルに入れる必要はありません。

開発エンドポイントへの Python ライブラリのロード

異なる ETL スクリプトに異なるライブラリセットを使用している場合、各セットに別々の開発エンドポイントをセットアップするか、スクリプトを切り替えるたびに開発エンドポイントがロードするライブラリ .zip ファイルを上書きすることができます。

コンソールを使用して、作成時に開発エンドポイントに 1 つまたは複数のライブラリ .zip ファイルを指定できます。名前と IAM ロールを割り当てた後、[Script Libraries and job parameters (optional)] (スクリプトライブラリおよびジョブパラメータ (任意)) をクリックし、[Python library path] (Python ライブラリパス) ボックスに、ライブラリ .zip ファイルへの完全な Amazon S3 パスを入力します。例:

s3://bucket/prefix/site-packages.zip

必要に応じてファイルへの複数のフルパスを指定できますが、以下のように、スペースなしでカンマで区切ります。

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

これらの .zip ファイルを後で更新する場合は、コンソールを使用して開発エンドポイントにそのファイルを再インポートできます。該当する開発エンドポイントに移動し、横にあるチェックボックスをオンにして、[Action] (アクション) メニューから [Update ETL libraries] (ETL ライブラリの更新) を選択します。

同様の方法で、AWS Glue API を使用してライブラリファイルを指定できます。CreateDevEndpoint アクション (Python: create_dev_endpoint) を呼び出して開発エンドポイントを作成する場合、ExtraPythonLibsS3Path パラメータでライブラリへの 1 つ以上のフルパスを指定できます。以下のような呼び出しになります。

dep = glue.create_dev_endpoint( EndpointName="testDevEndpoint", RoleArn="arn:aws:iam::123456789012", SecurityGroupIds="sg-7f5ad1ff", SubnetId="subnet-c12fdba4", PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...", NumberOfNodes=3, ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")

開発エンドポイントを更新するときに、DevEndpointCustomLibraries オブジェクトを使用し UpdateDevEndpoint (update_dev_endpoint) の呼び出し時に UpdateEtlLibraries パラメータを True に設定して、ロードするライブラリも更新できます。

ジョブまたは で Python ライブラリを使用する JobRun

コンソールで新しいジョブを作成する際、[Script Libraries and job parameters (optional)] (スクリプトライブラリおよびジョブパラメータ (任意)) をクリックし、開発エンドポイント作成時と同じ方法で Amazon S3 ライブラリの完全なパスを入力することで、1 つ以上のライブラリ .zip ファイルを指定できます。

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

CreateJob (create_job) を呼び出している場合は、以下のようにデフォルトの --extra-py-files パラメータを使用してデフォルトのライブラリへの 1 つ以上のフルパスを指定できます。

job = glue.create_job(Name='sampleJob', Role='Glue_DefaultRole', Command={'Name': 'glueetl', 'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'}, DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})

その後、 を開始するときに JobRun、デフォルトのライブラリ設定を別のライブラリ設定で上書きできます。

runId = glue.start_job_run(JobName='sampleJob', Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})