Compartilhar via


Uso avançado do Databricks Connect para Python

Observação

Esse artigo aborda o Databricks Connect para o Databricks Runtime 14.0 e superior.

Este artigo descreve tópicos que vão além da configuração básica do Databricks Connect.

Configurar a cadeia de conexão do Spark Connect

Além de se conectar ao cluster usando as opções descritas em Configurar uma conexão com um cluster, uma opção mais avançada é se conectar usando a cadeia de conexão do Spark Connect. Você pode passar a cadeia de caracteres na função remote ou definir a variável de ambiente SPARK_REMOTE.

Observação

Você só pode usar uma autenticação de token de acesso pessoal Databricks para se conectar usando a cadeia de conexão do Spark Connect.

Para definir a cadeia de conexão usando a função remote:

# Set the Spark Connect connection string in DatabricksSession.builder.remote.
from databricks.connect import DatabricksSession

workspace_instance_name = retrieve_workspace_instance_name()
token                   = retrieve_token()
cluster_id              = retrieve_cluster_id()

spark = DatabricksSession.builder.remote(
   f"sc://{workspace_instance_name}:443/;token={token};x-databricks-cluster-id={cluster_id}"
).getOrCreate()

Como alternativa, defina a variável de ambiente SPARK_REMOTE:

sc://<workspace-instance-name>:443/;token=<access-token-value>;x-databricks-cluster-id=<cluster-id>

Em seguida, inicialize a classe DatabricksSession da seguinte maneira:

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()

Shell do Pyspark

O Databricks Connect para Python é fornecido com um binário pyspark que é um REPL do PySpark (um shell do Apache Spark) configurado para usar o Databricks Connect.

Quando iniciado sem parâmetros adicionais, o shell seleciona as credenciais padrão do ambiente (por exemplo, as DATABRICKS_ variáveis de ambiente ou o DEFAULT perfil de configuração) para se conectar ao cluster do Azure Databricks. Para obter informações sobre como configurar uma conexão, consulte Configuração de computação para o Databricks Connect.

  1. Para iniciar o shell do Spark e conectá-lo ao cluster em execução, execute um dos seguintes comandos em seu ambiente virtual Python ativado:

    pyspark
    

    O shell do Spark é exibido, por exemplo:

    Python 3.10 ...
    [Clang ...] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    Welcome to
         ____              __
        / __/__  ___ _____/ /__
       _\ \/ _ \/ _ `/ __/  '_/
      /__ / .__/\_,_/_/ /_/\_\   version 13.x.dev0
         /_/
    
    Using Python version 3.10 ...
    Client connected to the Spark Connect server at sc://...:.../;token=...;x-databricks-cluster-id=...
    SparkSession available as 'spark'.
    >>>
    

    Depois que o shell é iniciado, o spark objeto fica disponível para executar comandos do Apache Spark no cluster do Databricks. Execute um comando simples do PySpark, como spark.range(1,10).show(). Se não houver erros, você se conectou com sucesso.

  2. Consulte Análise Interativa com o Shell do Spark para obter informações sobre como usar o shell Spark com Python para executar comandos em sua computação.

    Use a variável interna spark para representar o SparkSession no cluster em execução, por exemplo:

    >>> df = spark.read.table("samples.nyctaxi.trips")
    >>> df.show(5)
    +--------------------+---------------------+-------------+-----------+----------+-----------+
    |tpep_pickup_datetime|tpep_dropoff_datetime|trip_distance|fare_amount|pickup_zip|dropoff_zip|
    +--------------------+---------------------+-------------+-----------+----------+-----------+
    | 2016-02-14 16:52:13|  2016-02-14 17:16:04|         4.94|       19.0|     10282|      10171|
    | 2016-02-04 18:44:19|  2016-02-04 18:46:00|         0.28|        3.5|     10110|      10110|
    | 2016-02-17 17:13:57|  2016-02-17 17:17:55|          0.7|        5.0|     10103|      10023|
    | 2016-02-18 10:36:07|  2016-02-18 10:41:45|          0.8|        6.0|     10022|      10017|
    | 2016-02-22 14:14:41|  2016-02-22 14:31:52|         4.51|       17.0|     10110|      10282|
    +--------------------+---------------------+-------------+-----------+----------+-----------+
    only showing top 5 rows
    

    Todo o código Python é executado localmente, enquanto todo o código PySpark que envolve operações do DataFrame é executado no cluster no workspace remoto do Azure Databricks e as respostas de execução são enviadas de volta para o chamador local.

  3. Para interromper o shell do Spark, pressione Ctrl + d ou Ctrl + z, ou execute o comando quit() ou exit().

Cabeçalhos HTTP adicionais

O Databricks Connect se comunica com os Clusters do Databricks por meio de gRPC por HTTP/2.

Alguns usuários avançados podem optar por instalar um serviço proxy entre o cliente e o cluster do Azure Databricks para ter melhor controle sobre as solicitações provenientes dos clientes deles.

Os proxies, em alguns casos, podem exigir cabeçalhos personalizados nas solicitações HTTP.

O método headers() pode ser usado para adicionar cabeçalhos personalizados às solicitações HTTP.

spark = DatabricksSession.builder.header('x-custom-header', 'value').getOrCreate()

Certificados

Se seu cluster depender de um certificado SSL/TLS personalizado para resolver um nome de domínio totalmente qualificado (FQDN) de um Workspace do Azure Databricks, você deve definir a variável de ambiente GRPC_DEFAULT_SSL_ROOTS_FILE_PATH no seu computador de desenvolvimento local. Essa variável de ambiente deve ser configurada com o caminho completo para o certificado instalado no cluster.

Por exemplo, você define essa variável de ambiente em código Python da seguinte maneira:

import os

os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "/etc/ssl/certs/ca-bundle.crt"

Para outras maneiras de definir variáveis de ambiente, consulte a documentação do seu sistema operacional.

Registro em log e logs de depuração

O Databricks Connect para Python produz logs usando o registro em log do Python.

Os logs são emitidos para o fluxo de erros padrão (stderr) e, por padrão, apenas em logs no nível de AVISO e superiores são emitidos.

Definir uma variável de ambiente SPARK_CONNECT_LOG_LEVEL=debug modificará esse padrão e imprimirá todas as mensagens de log no nível DEBUG e superior.