Menggunakan pustaka Python dengan AWS Glue - AWS Glue

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan pustaka Python dengan AWS Glue

AWS Gluememungkinkan Anda menginstal modul dan pustaka Python tambahan untuk digunakan dengan ETL. AWS Glue

Menginstal modul Python tambahan dengan pip di 2.0+ AWS Glue

AWS Gluemenggunakan Python Package Installer (pip3) untuk menginstal modul tambahan yang akan digunakan oleh ETL. AWS Glue Anda dapat menggunakan --additional-python-modules parameter dengan daftar modul Python yang dipisahkan koma untuk menambahkan modul baru atau mengubah versi modul yang ada. Anda dapat menginstal distribusi kustom pustaka dengan mengunggah distribusi ke Amazon S3, lalu menyertakan jalur ke objek Amazon S3 dalam daftar modul Anda.

Anda dapat meneruskan opsi tambahan ke pip3 dengan parameter. --python-modules-installer-option Misalnya, Anda dapat meneruskan "--upgrade" untuk memutakhirkan paket yang ditentukan oleh"--additional-python-modules". Untuk contoh lainnya, lihat Membangun modul Python dari roda untuk beban kerja Spark ETL menggunakan Glue 2.0. AWS

Jika dependensi Python Anda secara transitif bergantung pada kode asli yang dikompilasi, Anda dapat menghadapi batasan berikut: AWS Glue tidak mendukung kompilasi kode asli di lingkungan pekerjaan. Namun, pekerjaan AWS Glue berjalan dalam lingkungan Amazon Linux 2. Anda mungkin dapat memberikan dependensi asli Anda dalam bentuk yang dikompilasi melalui Wheel yang dapat didistribusikan.

Misalnya untuk memperbarui atau menambahkan modul scikit-learn baru menggunakan nilai/kunci berikut: "--additional-python-modules", "scikit-learn==0.21.3".

Selain itu, dalam opsi --additional-python-modules Anda dapat menentukan path Amazon S3 ke modul roda Python. Sebagai contoh:

--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

Anda menentukan --additional-python-modules dalam bidang Parameter Job AWS Glue konsol atau dengan mengubah argumen pekerjaan di AWS SDK. Untuk informasi selengkapnya tentang pengaturan parameter pekerjaan, lihatAWS Glueparameter pekerjaan.

Termasuk file Python dengan fitur asli PySpark

AWS Gluedigunakan PySpark untuk menyertakan file Python dalam pekerjaan AWS Glue ETL. Anda akan ingin menggunakan --additional-python-modules untuk mengelola dependensi Anda bila tersedia. Anda dapat menggunakan parameter --extra-py-files pekerjaan untuk menyertakan file Python. Dependensi harus di-host di Amazon S3 dan nilai argumen harus berupa daftar jalur Amazon S3 yang dibatasi koma tanpa spasi. Fungsionalitas ini berperilaku seperti manajemen ketergantungan Python yang akan Anda gunakan dengan Spark. Untuk informasi selengkapnya tentang manajemen ketergantungan Python di Spark, lihat halaman Menggunakan Fitur PySpark Asli di dokumentasi Apache Spark. --extra-py-filesberguna dalam kasus di mana kode tambahan Anda tidak dikemas, atau saat Anda memigrasikan program Spark dengan rantai alat yang ada untuk mengelola dependensi. Agar alat ketergantungan Anda dapat dipertahankan, Anda harus menggabungkan dependensi Anda sebelum mengirimkan.

Skrip pemrograman yang menggunakan transformasi visual

Saat Anda membuat pekerjaan AWS Glue menggunakan antarmuka visual AWS Glue Studio, Anda dapat mengubah data Anda dengan node transformasi data terkelola dan transformasi visual khusus. Untuk informasi selengkapnya tentang node transformasi data terkelola, lihatMengedit node transformasi data AWS Glue terkelola. Untuk informasi selengkapnya tentang transformasi visual kustom, lihatAWS Gluetransformasi visual khusus . Skrip yang menggunakan transformasi visual hanya dapat dihasilkan ketika ketika pekerjaan Anda Bahasa diatur untuk menggunakan Python.

Saat membuat pekerjaan AWS Glue menggunakan transformasi visual, AWS Glue Studio akan menyertakan transformasi ini di lingkungan runtime menggunakan --extra-py-files parameter dalam konfigurasi pekerjaan. Untuk informasi selengkapnya tentang parameter pekerjaan, lihatAWS Glueparameter pekerjaan. Saat membuat perubahan pada skrip atau lingkungan runtime yang dihasilkan, Anda harus mempertahankan konfigurasi pekerjaan ini agar skrip Anda berhasil berjalan.

Modul Python sudah disediakan di AWS Glue

Untuk mengubah versi modul yang disediakan ini, berikan versi baru dengan parameter --additional-python-modules pekerjaan.

AWS Glue version 2.0

AWS Glueversi 2.0 mencakup modul Python berikut di luar kotak:

  • 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

  • klik==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

  • Percikan = 1.0

  • statsmodels==0.11.1

  • subprocess32==3.5.4

  • sympy==1.5.1

  • tbats==1.0.9

  • tqdm = 4.64.1

  • mengetik-ekstensi== 4.4.0

  • urllib3==1.25.8

  • roda==0.35.1

  • ritsleting = 3.12.0

AWS Glue versi 3.0

AWS Glueversi 3.0 mencakup modul Python berikut di luar kotak:,

  • aiobotocore==1.4.2

  • aiohttp = 3.8.3

  • aioitertools==0.11.0

  • aiosignal== 1.3.1

  • batas waktu asinkron = 4.0.2

  • asynctest = 0.13.0

  • attrs==22.2.0

  • avro-python3 = 1.10.2

  • boto3 = 1.18.50

  • botocore==1.21.50

  • sertifikasi = 2021.5.30

  • chardet==3.0.4

  • charset-normalizer = 2.1.1

  • klik==8.1.3

  • cycler==0.10.0

  • Cython==0.29.4

  • dokumen==0.17.1

  • enum34==1.1.10

  • daftar beku==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

  • multidikt = 6.0.4

  • nltk = 3.6.3

  • numpy = 1.19.5

  • pengepakan== 23.0

  • panda ==1.3.2

  • patsy==0.5.1

  • Bantal==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-belajar==0.24.2

  • scipy==1.7.1

  • enam==1.16.0

  • Percikan = 1.0

  • statsmodels==0.12.2

  • subprocess32==3.5.4

  • simpati=1,8

  • tbats==1.1.0

  • threadpoolctl = 3.1.0

  • tqdm = 4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • roda==0.37.0

  • bungkus=1.14.1

  • yarl=1.8.2

  • ritsleting = 3.12.0

AWS Glue versi 4.0

AWS Glueversi 4.0 mencakup modul Python berikut di luar kotak:

  • aiobotocore==2.4.1

  • aiohttp = 3.8.3

  • aioitertools==0.11.0

  • aiosignal== 1.3.1

  • batas waktu asinkron = 4.0.2

  • asynctest = 0.13.0

  • attrs==22.2.0

  • avro-python3 = 1.10.2

  • boto3 = 1.24.70

  • botocore==1.27.59

  • sertifikasi = 2021.5.30

  • chardet==3.0.4

  • charset-normalizer = 2.1.1

  • klik==8.1.3

  • cycler==0.10.0

  • Cython==0.29.32

  • dokumen==0.17.1

  • enum34==1.1.10

  • daftar beku==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata== 5.0.0

  • jmespath=0.10.0

  • joblib==1.0.1

  • kaleido==0.2.1

  • kiwisolver==1.4.4

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidikt = 6.0.4

  • nltk== 3.7

  • numpy = 1.23.5

  • pengepakan== 23.0

  • panda ==1.5.1

  • patsy==0.5.1

  • Bantal==9.4.0

  • pip=23.0.1

  • plot== 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-belajar==1.1.3

  • scipy==1.9.3

  • setuptool== 49.1.3

  • enam==1.16.0

  • statsmodels==0.13.5

  • subprocess32==3.5.4

  • simpati=1,8

  • tbats==1.1.0

  • threadpoolctl = 3.1.0

  • tqdm = 4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • roda==0.37.0

  • bungkus=1.14.1

  • yarl=1.8.2

  • ritsleting = 3.10.0

Pustaka ritsleting untuk dimasukkan

Kecuali sebuah perpustakaan terkandung dalam satu file .py, ia harus dikemas dalam sebuah arsip .zip. Direktori paket harus berada pada akar dari arsip, dan harus berisi file __init__.py untuk paket. Python kemudian akan dapat mengimpor paket tersebut dengan cara normal.

Jika perpustakaan anda hanya terdiri dari sebuah modul Python tunggal dalam satu file .py, Anda tidak perlu menempatkannya dalam sebuah file .zip.

Memuat pustaka Python di notebook Glue Studio AWS

Untuk menentukan library Python di notebook AWS Glue Studio, lihat Menginstal modul Python tambahan.

Memuat pustaka Python di titik akhir pengembangan

Jika Anda menggunakan set perpustakaan yang berbeda untuk skrip ETL yang berbeda, maka Anda dapat mengatur titik akhir pengembangan terpisah untuk setiap set, atau Anda dapat menimpa file .zip perpustakaan yang dimuat titik akhir pengembangan Anda setiap kali Anda beralih skrip.

Anda dapat menggunakan konsol untuk menentukan satu atau beberapa perpustakaan file .zip untuk sebuah titik akhir pengembangan ketika Anda membuatnya. Setelah menetapkan nama dan IAM role, pilih Perpustakaan Skrip dan parameter tugas (opsional) dan masukkan path Amazon S3 lengkap ke file .zip perpustakaan Anda dalam kotak path perpustakaan Python. Sebagai contoh:

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

Jika Anda mau, Anda dapat menentukan beberapa path lengkap ke file, memisahkannya dengan koma tetapi tanpa spasi, seperti ini:

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

Jika Anda kemudian memperbarui file .zip, Anda dapat menggunakan konsol untuk mengimpornya kembali ke titik akhir pengembangan Anda. Arahkan ke titik akhir developer yang dimaksud, centang kotak di sampingnya, dan pilih Memperbarui perpustakaan ETL dari menu Tindakan.

Dengan cara yang sama, Anda dapat menentukan file pustaka menggunakan AWS Glue API. Ketika Anda membuat sebuah titik akhir pengembangan dengan memanggil CreateDevEndpoint tindakan (Python: create_dev_endpoint), Anda dapat menentukan satu atau beberapa path lengkap ke perpustakaan di parameter ExtraPythonLibsS3Path, dalam panggilan yang terlihat seperti ini:

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")

Ketika Anda memperbarui titik akhir pengembangan, Anda juga dapat memperbarui perpustakaan yang dimuatnya menggunakan objek DevEndpointCustomLibraries dan pengaturan parameter UpdateEtlLibraries untuk True ketika memanggil UpdateDevEndpoint (update_dev_endpoint).

Menggunakan pustaka Python dalam pekerjaan atau JobRun

Ketika Anda membuat sebuah Tugas baru pada konsol, Anda dapat menentukan satu atau beberapa perperpustakaanan file .zip dengan memilih Perpustakaan skrip dan parameter tugas (opsional) dan memasukkan path perpustakaan Amazon S3 lengkap dengan cara yang sama saat membuat titik akhir pengembangan:

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

Jika Anda memanggil CreateJob (create_job), Anda dapat menentukan satu atau beberapa path lengkap ke perpustakaan default menggunakan parameter --extra-py-files default, seperti ini:

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'})

Kemudian ketika Anda memulai JobRun, Anda dapat mengganti pengaturan pustaka default dengan yang berbeda:

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