Os jobs do PySpark no Serviço Gerenciado para Apache Spark são executados por um interpretador do 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 do Python.
Verificar a versão e os módulos do intérprete
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 de 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 observação 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 fazem o download de 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 intérprete do Python para um job
Se vários interpretadores do Python estiverem instalados no cluster, o sistema 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 os 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, quando executar sudo python
--version, a versão do Python exibida poderá ser diferente da versão exibida por python --version. Essa diferença de versão pode ocorrer porque
sudo usa o sistema Python padrão /usr/bin/python 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. 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 de
cluster relacionadas ao conda.
Há duas maneiras mutuamente exclusivas de personalizar o ambiente 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 de 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 do 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 manualmente o arquivo, usar um arquivo atual 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, formatados 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 prefixar cada nome de pacote com o canal dele (comoconda-forge::). Se você transmitir nomes de pacotes sem prefixo, vai ocorrer uma falha 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), você precisa especificar um caractere delimitador alternativo. Consulte a propriedade Formatação do cluster. 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, formatadas comopkg1==v1,pkg2==v2.... Opipfaz upgrade das dependências atuais apenas 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), você precisa especificar um caractere delimitador alternativo. Consulte a propriedade Formatação do cluster. 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 ...