Usar bibliotecas Python com o AWS Glue - AWS Glue

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar bibliotecas Python com o AWS Glue

O AWS Glue permite que você instale módulos e bibliotecas Python adicionais para uso com ETL do AWS Glue.

Instalar módulos Python adicionais com pip no AWS Glue 2.0

O AWS Glue usa o Python Package Installer (pip3) para instalar módulos adicionais a serem usados pelo ETL do AWS Glue. Você pode usar o parâmetro --additional-python-modules com uma lista de módulos do Python separados por vírgulas para adicionar um novo módulo ou alterar a versão de um módulo existente. Você pode instalar distribuições personalizadas de uma biblioteca carregando a distribuição para o Amazon S3 e incluindo o caminho para o objeto do Amazon S3 na sua lista de módulos.

Você pode transmitir opções adicionais para o pip3 com o parâmetro --python-modules-installer-option. Por exemplo, você pode transmitir "--upgrade" para atualizar os pacotes especificados por "--additional-python-modules". Para ver mais exemplos, consulte Como criar módulos Python a partir de uma roda para cargas de trabalho de ETL do Spark usando o Glue 2.0. AWS

Se suas dependências do Python dependerem transitivamente de código compilado nativo, você pode se deparar com a seguinte limitação: O AWS Glue não oferece suporte à compilação de código nativo no ambiente de trabalho. No entanto, os trabalhos do AWS Glue são executados em um ambiente Amazon Linux 2. Talvez você possa fornecer suas dependências nativas em formato compilado por meio de um distribuível Wheel.

Por exemplo, para atualizar ou adicionar um novo módulo scikit-learn, use a seguinte chave-valor: "--additional-python-modules", "scikit-learn==0.21.3".

Além disso, dentro da opção --additional-python-modules, você pode especificar um caminho do Amazon S3 para um módulo wheel do Python. Por exemplo: .

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

Você especifica o --additional-python-modules no campo Parâmetros do trabalho do AWS Glue console ou alterando os argumentos do trabalho no AWS SDK. Para obter mais informações sobre como configurar parâmetros de trabalho, consulte Usando parâmetros de trabalho em trabalhos do AWS Glue.

Incluindo arquivos Python com recursos nativos PySpark

AWS Glueusa PySpark para incluir arquivos Python em trabalhos de ETL do AWS Glue. Recomenda-se usar --additional-python-modules para gerenciar suas dependências quando disponíveis. Você pode usar o parâmetro de trabalho --extra-py-files para incluir arquivos Python. As dependências devem ser hospedadas no Amazon S3, e o valor do argumento deve ser uma lista delimitada por vírgulas de caminhos do Amazon S3 sem espaços. Essa funcionalidade se comporta como o gerenciamento de dependências do Python que você usaria com o Spark. Para obter mais informações sobre o gerenciamento de dependências do Python no Spark, consulte a página Usando recursos PySpark nativos na documentação do Apache Spark. --extra-py-filesé útil nos casos em que seu código adicional não está empacotado ou quando você está migrando um programa Spark com uma cadeia de ferramentas existente para gerenciar dependências. Para que suas ferramentas de dependência sejam passíveis de manutenção, você precisará empacotar suas dependências antes de enviá-las.

Scripts de programação que usam transformações visuais

Ao criar uma tarefa do AWS Glue usando a interface visual do AWS Glue Studio, você pode transformar seus dados com nós de transformação de dados gerenciados e transformações visuais personalizadas. Para obter mais informações sobre nós de transformações de dados gerenciados, consulte Transforme dados com transformações AWS Glue gerenciadas. Para obter mais informações sobre transformações visuais personalizadas, consulte Transforme dados com transformações visuais personalizadas . Os scripts que usam transformações visuais só poderão ser gerados quando a Linguagem do trabalho estiver configurada para usar Python.

Ao gerar uma tarefa do AWS Glue usando transformações visuais, o AWS Glue Studio incluirá essas transformações no ambiente de execução usando o --extra-py-files parâmetro na configuração da tarefa. Para obter mais informações sobre parâmetros de trabalho, consulte Usando parâmetros de trabalho em trabalhos do AWS Glue. Ao fazer alterações em um script gerado ou em um ambiente de runtime, será necessário preservar essa configuração de trabalho para que seu script seja executado com êxito.

Módulos do Python já fornecidos no AWS Glue

Para alterar a versão desses módulos fornecidos, forneça novas versões com o parâmetro de trabalho --additional-python-modules.

AWS Glue version 2.0

O AWS Glue versão 2.0 inclui os seguintes módulos do Python prontos para uso:

  • 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 versão 3.0

O AWS Glue versão 3.0 inclui os seguintes módulos do Python prontos para uso:

  • 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 versão 4.0

O AWS Glue versão 4.0 inclui os seguintes módulos do Python prontos para uso:

  • 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

  • kaleido==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==1.1.3

  • 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

Compactar bibliotecas para inclusão

A menos que uma biblioteca esteja contida em um único arquivo .py, ela precisará ser compactada em uma pasta .zip. O diretório do pacote deve estar na raiz do arquivo e precisa conter um arquivo __init__.py para o pacote. Em seguida, o Python poderá importar o pacote normalmente.

Se a sua biblioteca contém um único módulo Python em um arquivo .py, você não precisará compactá-la em uma pasta .zip.

Carregando bibliotecas Python nos cadernos do AWS Glue Studio

Para especificar bibliotecas Python nos notebooks do AWS Glue Studio, consulte Instalação de módulos Python adicionais.

Carregar bibliotecas Python em um endpoint de desenvolvimento

Se você estiver usando diferentes conjuntos de bibliotecas para diferentes scripts de ETL, poderá configurar um endpoint de desenvolvimento separado para cada conjunto ou substituir os arquivos .zip da biblioteca carregados pelo seu endpoint de desenvolvimento sempre que os scripts são alternados.

Você pode usar o console para especificar um ou mais arquivos .zip da biblioteca para um endpoint de desenvolvimento ao criá-lo. Depois de atribuir um nome e uma função do IAM, escolha Script Libraries and job parameters (optional) (Bibliotecas de script e parâmetros de trabalho [opcional]) e insira o caminho completo do Amazon S3 para o arquivo .zip da sua biblioteca na caixa Python library path (Caminho da biblioteca Python). Por exemplo:

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

Se quiser, você poderá especificar vários caminhos completos para arquivos, separando-os com vírgulas, mas sem espaços, da seguinte maneira:

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

Se você atualizar esses arquivos .zip posteriormente, poderá usar o console para importá-los novamente para o seu endpoint de desenvolvimento. Navegue até o endpoint do desenvolvedor em questão, marque a caixa de seleção ao lado e escolha Update ETL libraries no menu Action.

De forma semelhante, você pode especificar arquivos de biblioteca usando as APIs do AWS Glue. Ao criar um endpoint de desenvolvimento chamando Ação CreateDevEndpoint (Python: create_dev_endpoint), você pode especificar um ou mais caminhos completos para bibliotecas no parâmetro ExtraPythonLibsS3Path. Essa chamada é semelhante à seguinte:

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

Ao atualizar um endpoint de desenvolvimento, você também pode atualizar as bibliotecas que ele carrega usando um objeto DevEndpointCustomLibraries e definindo o parâmetro UpdateEtlLibraries como True ao chamar UpdateDevEndpoint (update_dev_endpoint).

Usando bibliotecas Python em um trabalho ou JobRun

Ao criar um novo trabalho no console, você pode especificar um ou mais arquivos .zip de biblioteca escolhendo a opção Script Libraries and job parameters (optional) (Bibliotecas de script e parâmetros de trabalho [opcional]) e inserindo os caminhos completos das bibliotecas do Amazon S3, da mesma maneira como você faria ao criar um endpoint de desenvolvimento:

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

Se você estiver chamando CreateJob (create_job), poderá especificar um ou mais caminhos completos para bibliotecas padrão usando o parâmetro padrão --extra-py-files, da seguinte maneira:

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

Então, ao iniciar um JobRun, você pode substituir a configuração padrão da biblioteca por uma diferente:

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