Os jobs do PySpark no Serviço Gerenciado para Apache Spark são executados por um interpretador Python no cluster. O código do job precisa ser compatível no ambiente de execução com a versão e as dependências do interpretador Python.
Verificar a versão do interpretador e os módulos
O programa de amostra check_python_env.py a seguir verifica o usuário do Linux que executa o job, o interpretador do Python e os módulos disponíveis.
import getpass import importlib.util import sys print(f'This job is running as "{getpass.getuser()}".') print(sys.executable, sys.version_info) for package in sys.argv[1:]: print(importlib.util.find_spec(package))
Execute o programa:
REGION=region gcloud dataproc jobs submit pyspark check_python_env.py \ --cluster=my-cluster \ --region=${REGION} \ -- pandas scipy
Exemplo de resposta:
This job is running as "root". /opt/conda/default/bin/python sys.version_info(major=3, minor=11, micro=8, releaselevel='final', serial=0) ModuleSpec(name='pandas', loader=<_frozen_importlibexternal.SourceFileLoader object at 0x7f8b9c0a3d90>, origin='/opt/conda/default/lib/python3.11/site-packages/pandas/init_.py', submodule_search_locations=['/opt/conda/default/lib/python3.11/site-packages/pandas']) ModuleSpec(name='scipy', loader=<_frozen_importlibexternal.SourceFileLoader object at 0x7f8b9c0a3e50>, origin='/opt/conda/default/lib/python3.11/site-packages/scipy/init_.py', submodule_search_locations=['/opt/conda/default/lib/python3.11/site-packages/scipy'])
Ambientes Python de imagem do Serviço Gerenciado para Apache Spark
As seções a seguir descrevem os ambientes Python para clusters compatíveis com a versão da imagem do Serviço Gerenciado para Apache Spark.
Versão 2.x da imagem do Serviço Gerenciado para Apache Spark
O Conda (ou micromamba em imagens 2.3) está instalado em clusters do Serviço Gerenciado para Apache Spark 2.x. O interpretador padrão do Python 3 está localizado na instância de VM em /opt/conda/default/bin. As páginas a seguir listam a versão do Python incluída
nas versões de imagem 2.x compatíveis do Serviço Gerenciado para Apache Spark:
O interpretador Python não padrão do SO está disponível em /usr/bin/.
É possível instalar pacotes conda e pip no ambiente base ou configurar seu próprio ambiente conda no cluster usando propriedades do cluster relacionadas ao conda.
Observação sobre o canal conda: as versões de imagem padrão 2.1, 2.2 e 2.3 do Serviço Gerenciado para Apache Spark não incluem canais de pacotes conda pré-configurados (como defaults ou conda-forge) em .condarc. Consulte a nota da versão de 4 de setembro de 2026.
Transmitir nomes de pacotes sem prefixo para dataproc:conda.packages ou executar
conda install PACKAGE sem especificar um canal falha com
CondaValueError: No channels available to install from ou
PackagesNotFoundError.
Para instalar pacotes do Conda, especifique explicitamente o canal:
- Ao usar a propriedade
dataproc:conda.packages, use o formatoCHANNEL::PACKAGE==VERSION(por exemplo,dataproc:conda.packages=conda-forge::pip==24.0). - Ao executar
conda installna linha de comando, transmita a flag-c(ou--channel). Por exemplo,conda install PACKAGES -c conda-forge.
Exemplo:
REGION=region gcloud dataproc clusters create my-cluster \ --image-version=2.3 \ --region=${REGION} \ --properties=^#^dataproc:conda.packages='conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0'#dataproc:pip.packages='tokenizers==0.15.0,datasets==2.16.1'
Versão 3.0 da imagem do Serviço Gerenciado para Apache Spark
O Python 3 está instalado nos clusters do Serviço Gerenciado para Apache Spark 3.0. Nas imagens 3.0, o Pixi é instalado como parte da instalação do Python e é usado para instalar pacotes Python em vez do Conda.
Evitar problemas de download de pacotes
Os nós de cluster do Serviço Gerenciado para Apache Spark baixam pacotes de repositórios públicos externos do Python ao instalar pacotes personalizados conda e pip (consulte propriedades do cluster relacionadas ao conda).
Para evitar falhas na criação de clusters devido à indisponibilidade de repositórios públicos do Python, crie uma imagem personalizada do Serviço Gerenciado para Apache Spark ou faça upload das dependências para um bucket do Cloud Storage. Consulte Fazer o download de dependências com clusters somente de IP interno.
Escolher um interpretador Python para um job
Se vários interpretadores do Python estiverem instalados no cluster, o sistema vai executar
/etc/profile.d/effective-python.sh, que exporta a variável de ambiente PYSPARK_PYTHON
para escolher o interpretador padrão do Python para seus jobs do PySpark. Se você precisar de um interpretador Python não padrão para um job do PySpark, ao
enviar o job para o cluster, defina as propriedades spark.pyspark.python e
spark.pyspark.driver.python para o caminho ou a versão do Python necessários
(por exemplo, "/usr/bin/python3" ou "python3.11").
Exemplo:
REGION=region gcloud dataproc jobs submit pyspark check_python_env.py \ --cluster=my-cluster \ --region=${REGION} \ --properties="spark.pyspark.python=/usr/bin/python3,spark.pyspark.driver.python=/usr/bin/python3"
Python com sudo
Se você se conectar a um nó de cluster usando SSH, ao executar sudo python
--version, a versão do Python mostrada poderá ser diferente da versão
mostrada por python --version. Essa diferença de versão pode ocorrer porque
o sudo usa o Python /usr/bin/python padrão do sistema e não executa
/etc/profile.d/effective-python.sh para inicializar o ambiente Python. Para uma
experiência consistente ao usar sudo, localize o caminho do Python definido em
/etc/profile.d/effective-python.sh e execute o comando env para definir o
PATH como esse caminho do Python. Por exemplo:
sudo env PATH=/opt/conda/default/bin:${PATH} python --version
Usar propriedades de cluster relacionadas ao conda
É possível personalizar o ambiente conda durante a criação do cluster usando
propriedades do cluster
relacionadas ao conda.
Há duas maneiras mutuamente exclusivas de personalizar o ambiente do conda ao criar um cluster do Serviço Gerenciado para Apache Spark:
Use a propriedade de cluster
dataproc:conda.env.config.uripara criar e ativar um novo ambiente conda no cluster. ouUse as propriedades de cluster
dataproc:conda.packagesedataproc:pip.packagespara adicionar pacotescondaepip, respectivamente, ao ambientecondabaseno cluster.
Propriedades do cluster relacionadas ao conda
dataproc:conda.env.config.uri:o caminho absoluto para um arquivo de configuração YAML do ambiente conda localizado no Cloud Storage. Esse arquivo é usado para criar e ativar um novo ambientecondano cluster. Como as imagens padrão não incluem canais Conda pré-configurados, verifique se o arquivoenvironment.yamllista explicitamente os canais de pacote necessários (comoconda-forge) emchannels.Exemplo:
Receba ou crie um arquivo de configuração
environment.yamldo conda. É possível criar o arquivo manualmente, usar um arquivo existente ou exportar um ambiente conda para um arquivoenvironment.yamlusando o seguinte comando:conda env export --name=env-name > environment.yaml
Copie o arquivo de configuração para o bucket do Cloud Storage.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
Crie o cluster e aponte para o arquivo de configuração do ambiente no Cloud Storage.
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='dataproc:conda.env.config.uri=gs://bucket-name/environment.yaml' \ ... other flags ...
dataproc:conda.packages:uma lista de pacotescondacom canais e versões específicos a serem instalados no ambiente de base, formatada comoCHANNEL::PACKAGE==VERSION(por exemplo,conda-forge::pkg1==v1,conda-forge::pkg2==v2...). Secondanão conseguir resolver conflitos com pacotes existentes no ambiente de base, os pacotes conflitantes não serão instalados.Observações:
Como as versões de imagem padrão do Serviço Gerenciado para Apache Spark
2.1,2.2e2.3não incluem canais conda pré-configurados em.condarc, é necessário adicionar um prefixo a cada nome de pacote com o canal dele (comoconda-forge::). Se você transmitir nomes de pacotes sem prefixo, a ação vai falhar comCondaValueError: No channels available to install fromouPackagesNotFoundError.As propriedades de cluster
dataproc:conda.packagesedataproc:pip.packagesnão podem ser usadas com a propriedade de clusterdataproc:conda.env.config.uri.Ao especificar vários pacotes (separados por vírgula), é necessário especificar um caractere delimitador alternativo (consulte a propriedade de cluster Formatação). O exemplo a seguir especifica "#" como o caractere delimitador para transmitir vários nomes de pacotes separados por vírgulas à propriedade
dataproc:conda.packages.
Exemplo:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='^#^dataproc:conda.packages=conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0' \ ... other flags ...
dataproc:pip.packages:uma lista de pacotespipcom versões específicas a serem instaladas no ambiente de base, formatada comopkg1==v1,pkg2==v2.... Opipsó faz upgrade das dependências atuais se necessário. Os conflitos podem tornar o ambiente inconsistente.Observações:
As propriedades de cluster
dataproc:pip.packagesedataproc:conda.packagesnão podem ser usadas com a propriedade de clusterdataproc:conda.env.config.uri.Ao especificar vários pacotes (separados por vírgula), é necessário especificar um caractere delimitador alternativo (consulte a propriedade de cluster Formatação). O exemplo a seguir especifica "#" como o caractere delimitador para transmitir vários nomes de pacotes separados por vírgulas para a propriedade
dataproc:pip.packages.
Exemplo:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --properties='^#^dataproc:pip.packages=tokenizers==0.15.0,datasets==2.16.1' \ ... other flags ...
É possível usar
dataproc:conda.packagesedataproc:pip.packagesao criar um cluster.Exemplo:
REGION=region gcloud dataproc clusters create cluster-name \ --region=${REGION} \ --image-version=2.3 \ --properties=^#^dataproc:conda.packages='conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0'#dataproc:pip.packages='tokenizers==0.15.0,datasets==2.16.1' \ ... other flags ...