[アップデート] AWS Glue Python Shellがプリロードライブラリを備えた Python 3.9環境、追加ライブラリのインストールを実際に試してみました!
データアナリティクス事業本部コンサルティングチームの石川です。先日、Python 3.9をサポートと、このアップデートに合わせて柔軟プリロード環境や追加のライブラリのインストールにも対応しました。本日は、これらのアップデートについて実際に試してみました!
なお、執筆時点では、東京リージョン(ap-northeast-1)では、Python 3.9が選択できなかったため、バージニアリージョン(us-east-1)にて動作を確認しました。2022/08/22時点で、東京リージョン(ap-northeast-1)でもPython 3.9が選択できることを確認しました。
プリロードライブラリを備えた Python 3.9環境
プリロードライブラリを備えた Python 3.9環境とは、事前に分析系のライブラリをプレインストールした実行環境、とそうでない環境が選択できることを表します。プリロードライブラリは、none
とanalytics
の2つが提供されました。今後は、プリロードライブラリanaytics
を選択する事で、分析関連の代表的なライブラリを明示的に導入せずに利用できるようになります。
- none:Python 3.9の標準ライブラリにawscliとbotocoreのみの実行環境
- analytics (default):上記に加えて、分析用のライブラリを含んだ実行環境
AWS Big Data Blogによると、下記のライブラリが利用できることが紹介されています。
Python version | Python 3.9 | |
---|---|---|
Library set | analytics (default) | none |
avro | 1.11.0 | . |
awscli | 1.23.5 | 1.23.5 |
awswrangler | 2.15.1 | . |
botocore | 1.23.5 | 1.23.5 |
boto3 | 1.22.5 | . |
elasticsearch | 8.2.0 | . |
numpy | 1.22.3 | . |
pandas | 1.4.2 | . |
psycopg2 | 2.9.3 | . |
pyathena | 2.5.3 | . |
PyMySQL | 1.0.2 | . |
pyodbc | 4.0.32 | . |
pyorc | 0.6.0 | . |
redshift-connector | 2.0.907 | . |
requests | 2.27.1 | . |
scikit-learn | 1.0.2 | . |
scipy | 1.8.0 | . |
SQLAlchemy | 1.4.36 | . |
s3fs | 2022.3.0 | . |
しかし、私はもっと詳しく、Python 3.9の詳細なバージョンやanalytics (default)に含まれるライブラリについて、実際にスクリプトを実行して確認します。
AWS Glue Studioの画面で、[Python Shell script editor]を選択して、[Create]ボタンを押します。
[Script]タブに実行したい、スクリプトを入力します。
[Job details]タブを選択すると、Python versionからPython 3.9
が選択できるようになっています。IAM Roleを指定して、[Run]ボタンを押すと実行されます。
実行結果の出力は、CloudWatch Logsから確認できます。将来的に変更になるかもしれませんが、1/16DPUのスペック、含まれているライブラリ等は、以下のとおりです。
- Pythonの詳細なバージョンは、Python 3.9.10
- OSからは、2つのコアが確認
- MemTotalは、約960MB(982176 kB)
- ストレージの空き容量は約13.68GiB(14349104B)
- analytics (default)のパッケージの詳細
- aenum==3.1.11
- aiobotocore==2.2.0
- aiohttp==3.8.1
- aioitertools==0.10.0
- aiosignal==1.2.0
- asn1crypto==1.5.1
- async-timeout==4.0.2
- attrs==21.4.0
- avro==1.11.0
- awscli==1.23.5
- awswrangler==2.15.1
- backoff==1.11.1
- beautifulsoup4==4.11.1
- boto3==1.21.21
- botocore==1.24.21
- certifi==2022.5.18.1
- charset-normalizer==2.0.12
- colorama==0.4.4
- cx-Oracle==8.3.0
- decorator==5.1.1
- docutils==0.15.2
- elastic-transport==8.1.2
- elasticsearch==8.2.0
- et-xmlfile==1.1.0
- frozenlist==1.3.0
- fsspec==2022.3.0
- greenlet==1.1.2
- gremlinpython==3.6.0
- idna==3.3
- isodate==0.6.1
- jmespath==1.0.0
- joblib==1.1.0
- jsonpath-ng==1.5.3
- lxml==4.9.0
- multidict==6.0.2
- nest-asyncio==1.5.5
- numpy==1.22.3
- openpyxl==3.0.10
- opensearch-py==1.1.0
- packaging==21.3
- pandas==1.4.2
- pg8000==1.29.1
- ply==3.11
- progressbar2==4.0.0
- psycopg2==2.9.3
- pyarrow==7.0.0
- pyasn1==0.4.8
- pyathena==2.5.3
- PyMySQL==1.0.2
- pyodbc==4.0.32
- pyorc==0.6.0
- pyparsing==3.0.9
- python-dateutil==2.8.2
- python-utils==3.3.3
- pytz==2022.1
- PyYAML==5.4.1
- redshift-connector==2.0.907
- requests==2.27.1
- requests-aws4auth==1.1.2
- rsa==4.7.2
- s3fs==2022.3.0
- s3transfer==0.5.2
- scikit-learn==1.0.2
- scipy==1.8.0
- scramp==1.4.1
- six==1.16.0
- soupsieve==2.3.2.post1
- SQLAlchemy==1.4.36
- tenacity==8.0.1
- threadpoolctl==3.1.0
- typing_extensions==4.2.0
- urllib3==1.26.9
- wrapt==1.14.1
- yarl==1.7.2
ログの内容は、以下のとおりです。(freeとdpkgはエラーになったため、出力されていません。)
No older events at this moment. Retry SCRIPT_LOCATION = s3://aws-glue-assets-517444948157-us-east-1/scripts/ps_os_python39.py file = s3://aws-glue-assets-517444948157-us-east-1/scripts/ps_os_python39.py file to download from: s3://aws-glue-assets-517444948157-us-east-1/scripts/ps_os_python39.py downloading s3://aws-glue-assets-517444948157-us-east-1/scripts/ps_os_python39.py; attempt: 0... Completed 574 Bytes/574 Bytes (10.7 KiB/s) with 1 file(s) remaining download: s3://aws-glue-assets-517444948157-us-east-1/scripts/ps_os_python39.py to glue-python-scripts-ytnG/ps_os_python39.py downloaded s3://aws-glue-assets-517444948157-us-east-1/scripts/ps_os_python39.py. Setting python runtime env to 3.9 analytics (default) Setup complete. Starting script execution: ---- Python 3.9.10 total 80 drwxr-xr-x 1 root root 4096 Aug 14 10:02 . drwxr-xr-x 1 root root 4096 Aug 14 10:02 .. -rwxr-xr-x 1 root root 0 Aug 14 10:02 .dockerenv drwxr-xr-x 1 10000 root 4096 Jun 2 19:20 .pyenv lrwxrwxrwx 1 root root 7 Mar 7 00:13 bin -> usr/bin dr-xr-xr-x 2 root root 4096 Apr 9 2019 boot drwxr-x--- 2 root root 4096 Aug 14 10:02 connection drwxr-xr-x 5 root root 340 Aug 14 10:02 dev drwxr-xr-x 1 root root 4096 Aug 14 10:02 etc drwxr-xr-x 1 root root 4096 Jun 27 17:55 glue drwxr-xr-x 2 root root 4096 Apr 9 2019 home lrwxrwxrwx 1 root root 7 Mar 7 00:13 lib -> usr/lib lrwxrwxrwx 1 root root 9 Mar 7 00:13 lib64 -> usr/lib64 drwxr-xr-x 2 root root 4096 Mar 7 00:13 local drwxr-xr-x 2 root root 4096 Apr 9 2019 media drwxr-xr-x 2 root root 4096 Apr 9 2019 mnt drwxr-xr-x 1 root root 4096 Jun 27 17:57 opt dr-xr-xr-x 108 root root 0 Aug 14 10:02 proc drwxr-x--- 2 root root 4096 Aug 14 10:02 reporting dr-xr-x--- 1 root root 4096 Jun 2 19:20 root drwxr-xr-x 1 root root 4096 Jun 2 19:19 run lrwxrwxrwx 1 root root 8 Mar 7 00:13 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Apr 9 2019 srv dr-xr-xr-x 13 root root 0 Aug 14 10:02 sys drwxrwxrwt 1 10000 root 4096 Aug 14 10:02 tmp drwxr-xr-x 1 root root 4096 Mar 7 00:13 usr drwxr-xr-x 1 root root 4096 Mar 7 00:13 var Linux ip-172-35-61-161.ec2.internal 4.14.238-125.422.amzn1.x86_64 #1 SMP Tue Jul 20 20:51:46 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz stepping : 7 microcode : 0x500320a cpu MHz : 2499.998 cache size : 36608 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4999.99 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 85 model name : Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz stepping : 7 microcode : 0x500320a cpu MHz : 2499.998 cache size : 36608 KB physical id : 0 siblings : 2 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves ida arat pku ospke bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4999.99 clflush size : 64 cache_alignment : 64 address sizes : 46 bits physical, 48 bits virtual power management: MemTotal: 982176 kB MemFree: 148696 kB MemAvailable: 495000 kB Buffers: 83476 kB Cached: 419968 kB SwapCached: 0 kB Active: 526156 kB Inactive: 229860 kB Active(anon): 244112 kB Inactive(anon): 56 kB Active(file): 282044 kB Inactive(file): 229804 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 404 kB Writeback: 0 kB AnonPages: 252596 kB Mapped: 204476 kB Shmem: 68 kB Slab: 49636 kB SReclaimable: 36628 kB SUnreclaim: 13008 kB KernelStack: 2976 kB PageTables: 4364 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 491088 kB Committed_AS: 1042940 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 63400 kB DirectMap2M: 956416 kB DirectMap1G: 0 kB Filesystem 1K-blocks Used Available Use% Mounted on overlay 20574824 6125472 14349104 30% / tmpfs 65536 0 65536 0% /dev tmpfs 491088 0 491088 0% /sys/fs/cgroup /dev/nvme0n1p1 20574824 6125472 14349104 30% /reporting shm 65536 0 65536 0% /dev/shm tmpfs 491088 0 491088 0% /proc/acpi tmpfs 491088 0 491088 0% /sys/firmware overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/4ZTYU5MILDXVKZP2P6WYFHXQ3L:/var/lib/docker/overlay2/l/ZL6E5BUAWWEAF3YFGVRG3VQQYJ:/var/lib/docker/overlay2/l/6MQNKE5GN73SRXRUFMM2CXU7XO:/var/lib/docker/overlay2/l/5AO6276EMPDWMXZVUYGBPWLICK:/var/lib/docker/overlay2/l/A2R4CAR7DPE5CBS2VIVBI722VX:/var/lib/docker/overlay2/l/I3LGLSX6SJZ74RWWG7WCXYZB7Y:/var/lib/docker/overlay2/l/XX4FDXKC3XLLDQD7EM55KCJPGI:/var/lib/docker/overlay2/l/K5AZRFXS7DF7GZ4ZWPGKBMDTJA:/var/lib/docker/overlay2/l/2JQNICESNBZQCVUH7FYXC7FS3Q:/var/lib/docker/overlay2/l/AG7AEVI4DJGYP6PNP4IP5CEFMG:/var/lib/docker/overlay2/l/J275KL5APRXZURU3SOSONGZTNU:/var/lib/docker/overlay2/l/CSIAVNLV4PTWCP23TQO6O6ZFF2:/var/lib/docker/overlay2/l/72YVUH6GWG537VAEIPULR6BT46:/var/lib/docker/overlay2/l/SUTQE72ZZRTN2MJJQHRGXKI3NC:/var/lib/docker/overlay2/l/3QDEODWPXADZVXITWHS625RVZH:/var/lib/docker/overlay2/l/YJ4CG6GOFXB4ZXDGFIBEGGA2XD:/var/lib/docker/overlay2/l/23LSCXLETEBALGIH4MGFYGTJ25:/var/lib/docker/overlay2/l/7HFYQSSBK7RELGW3V73XT3DS57:/var/lib/docker/overlay2/l/MVZIKYH5KMIMCJS275MLZ4K6XG:/var/lib/docker/overlay2/l/XVDTRD6OBXEIE7LXZNX5ZHMTYA:/var/lib/docker/overlay2/l/OMYPLUA7QRJONXUGK5RDVDVFAS:/var/lib/docker/overlay2/l/FVSZAYEGTWLNVFNTRGYMGMMXKR:/var/lib/docker/overlay2/l/HPIJT6R6SRWWHJPV2WKXSO364W:/var/lib/docker/overlay2/l/QHDRZLOFQWQ6GK6SS2ZKSESNOW:/var/lib/docker/overlay2/l/AH6KTNPGFEABGDUSOCMIIPF2XS:/var/lib/docker/overlay2/l/3IG52BAD4JM2T363F7OLMSN43M:/var/lib/docker/overlay2/l/FW6CLQIBEAYMW2OETESTLXMY4K:/var/lib/docker/overlay2/l/TOJGQPMFAPNWPXOMC7YN6EFH7L:/var/lib/docker/overlay2/l/GN7TC6MAIIJQFXHC5OBMTQPLY5:/var/lib/docker/overlay2/l/PJQG2MMOAF37RMB5MGRB2N52KI:/var/lib/docker/overlay2/l/XJXWIATDAFKTAKBTJ5X6R3BE7N:/var/lib/docker/overlay2/l/AQA7ZNQUDVSQIUU5DX7SLECRVR:/var/lib/docker/overlay2/l/X4UQHUGXCS6CH6SSBSCFPG7TFJ:/var/lib/docker/overlay2/l/ZL2DS46VEORH3KU76IDLV6DUUC:/var/lib/docker/overlay2/l/CMM5TPZVTFKZYTLPBPNSXIBP5T:/var/lib/docker/overlay2/l/Q2FYAES4NN52MP5N3IJTE55QYV:/var/lib/docker/overlay2/l/VP2BUZN7XVHMP2THKDLI5ZKDLH:/var/lib/docker/overlay2/l/MHESJJMZQBOXQYWMLHIYIX27VD:/var/lib/docker/overlay2/l/DKIL523H6KOOVXVSMFO2HYTZRW,upperdir=/var/lib/docker/overlay2/f54ac5f09aa2274ed18f4aa6e6335c503aac873c1dbbea03f48e889f027498ac/diff,workdir=/var/lib/docker/overlay2/f54ac5f09aa2274ed18f4aa6e6335c503aac873c1dbbea03f48e889f027498ac/work) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev type tmpfs (rw,nosuid,size=65536k,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666) sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime) tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755) cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/cpu type cgroup (ro,nosuid,nodev,noexec,relatime,cpu) cgroup on /sys/fs/cgroup/cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,cpuacct) cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,pids) mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime) /dev/nvme0n1p1 on /reporting type ext4 (rw,noatime,data=ordered) /dev/nvme0n1p1 on /connection type ext4 (ro,noatime,data=ordered) /dev/nvme0n1p1 on /etc/resolv.conf type ext4 (rw,noatime,data=ordered) /dev/nvme0n1p1 on /etc/hostname type ext4 (rw,noatime,data=ordered) /dev/nvme0n1p1 on /etc/hosts type ext4 (rw,noatime,data=ordered) shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=65536k) proc on /proc/bus type proc (ro,nosuid,nodev,noexec,relatime) proc on /proc/fs type proc (ro,nosuid,nodev,noexec,relatime) proc on /proc/irq type proc (ro,nosuid,nodev,noexec,relatime) proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime) proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime) tmpfs on /proc/acpi type tmpfs (ro,relatime) tmpfs on /proc/kcore type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/keys type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/latency_stats type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/timer_list type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /proc/sched_debug type tmpfs (rw,nosuid,size=65536k,mode=755) tmpfs on /sys/firmware type tmpfs (ro,relatime) aenum==3.1.11 aiobotocore==2.2.0 aiohttp==3.8.1 aioitertools==0.10.0 aiosignal==1.2.0 asn1crypto==1.5.1 async-timeout==4.0.2 attrs==21.4.0 avro==1.11.0 awscli==1.23.5 awswrangler==2.15.1 backoff==1.11.1 beautifulsoup4==4.11.1 boto3==1.21.21 botocore==1.24.21 certifi==2022.5.18.1 charset-normalizer==2.0.12 colorama==0.4.4 cx-Oracle==8.3.0 decorator==5.1.1 docutils==0.15.2 elastic-transport==8.1.2 elasticsearch==8.2.0 et-xmlfile==1.1.0 frozenlist==1.3.0 fsspec==2022.3.0 greenlet==1.1.2 gremlinpython==3.6.0 idna==3.3 isodate==0.6.1 jmespath==1.0.0 joblib==1.1.0 jsonpath-ng==1.5.3 lxml==4.9.0 multidict==6.0.2 nest-asyncio==1.5.5 numpy==1.22.3 openpyxl==3.0.10 opensearch-py==1.1.0 packaging==21.3 pandas==1.4.2 pg8000==1.29.1 ply==3.11 progressbar2==4.0.0 psycopg2==2.9.3 pyarrow==7.0.0 pyasn1==0.4.8 pyathena==2.5.3 PyMySQL==1.0.2 pyodbc==4.0.32 pyorc==0.6.0 pyparsing==3.0.9 python-dateutil==2.8.2 python-utils==3.3.3 pytz==2022.1 PyYAML==5.4.1 redshift-connector==2.0.907 requests==2.27.1 requests-aws4auth==1.1.2 rsa==4.7.2 s3fs==2022.3.0 s3transfer==0.5.2 scikit-learn==1.0.2 scipy==1.8.0 scramp==1.4.1 six==1.16.0 soupsieve==2.3.2.post1 SQLAlchemy==1.4.36 tenacity==8.0.1 threadpoolctl==3.1.0 typing_extensions==4.2.0 urllib3==1.26.9 wrapt==1.14.1 yarl==1.7.2
追加ライブラリのインストール
この機能は、AWS Glue ETL Job(Glueバージョン2.0)のPython3ですでにサポートされていました。この度、Python ShellのPython3.9サポートに伴い追加になりました。しかし、ETL Jobと指定方法が若干異なります。
Python Shellでは、ジョブパラメータ--additional-python-modules
に既存のモジュールのバージョンを変更や新しく追加したいモジュールをカンマ区切りで指定します。
例えば、
- モジュールの新規インストール:imbalanced-learnモジュール(0.9.1)をインストールしたい
- モジュールの更新:scikit-learnをデフォルトの 1.0.2ではなく、最新の1.1.2を利用したい
この場合は、
ジョブパラメータ--additional-python-modules
にimbalanced-learn==0.9.1,scikit-learn==1.1.2
を指定します。
[Save]した後、[Run]するとモジュールのインストール、更新状況が確認できます。
モジュールの一覧から、新規にモジュールが追加、更新されたことが確認できます。
最後に
新しいプリロードライブラリを備えた Python 3.9環境は、データ分析で必要とされる主要なライブラリをサポートしました。また、今後は.wheelファイルも作らずに簡単に、ジョブパラメタにモジュール名とバージョンを設定するだけで自動的にインストールできます。後は、東京リージョンで利用できるようになるだけです!
従来のPython Shellでは、新規にモジュールを追加したい場合、.wheelファイルを作成して実行時にそのライブラリをS3から読み込む必要がありました。例えば、mysqlに接続したい場合に従来のPython3.6では、extra-py-filesに指定されたmysql_connectorは、protobufというライブラリが必要なため、内部で自動的にpip install protobufが実行します。しかし、ある日突然、protobufがPythonバージョン3.7以降を要求するようになり、インストールが失敗し、例外が発生してGlueジョブが終了するようになる事がありました。このような悲劇は、Python 3.9に変更して、追加ライブラリのインストールを用いることで、過去の出来事になるはずです。ぜひぜひ、Python 3.9への移行をご検討ください。