Uso avanzado de Databricks Connect para Python
Nota:
En este artículo se habla de Databricks Connect para Databricks Runtime 14.0 y versiones posteriores.
En este artículo se describen los temas que van más allá de la configuración básica de Databricks Connect.
Configuración de la cadena de conexión de Spark Connect
Puede utilizar las opciones que se describen en Configuración de una conexión a un clúster para conectarse a su clúster, pero una opción más avanzada consiste en hacerlo mediante la cadena de conexión de Spark Connect. Puede pasar la cadena en la función remote
, o bien establecer la variable de entorno SPARK_REMOTE
.
Nota:
Solo puede usar una autenticación de token de acceso personal de Databricks para conectarse mediante la cadena de conexión de Spark Connect.
Para establecer la cadena de conexión mediante la función 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, establezca la variable de entorno SPARK_REMOTE
:
sc://<workspace-instance-name>:443/;token=<access-token-value>;x-databricks-cluster-id=<cluster-id>
Y, a continuación, inicialice la clase DatabricksSession
como se indica:
from databricks.connect import DatabricksSession
spark = DatabricksSession.builder.getOrCreate()
Shell de Pyspark
Databricks Connect para Python incluye binario pyspark
, que es una REPL de PySpark (una shell de Spark) configurada para usar Databricks Connect.
Cuando se inicia sin parámetros adicionales, el shell recoge las credenciales predeterminadas del entorno (por ejemplo, las DATABRICKS_
variables de entorno o el DEFAULT
perfil de configuración) para conectarse al clúster de Azure Databricks. Para obtener información sobre cómo configurar una conexión, consulte Configuración de proceso para Databricks Connect.
Para iniciar el shell de Spark y conectarlo al clúster en ejecución, ejecute uno de los siguientes comandos desde el entorno virtual activado de Python:
pyspark
Aparece el shell de Spark, por ejemplo:
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'. >>>
Una vez que se inicia el shell, el
spark
objeto está disponible para ejecutar comandos de Apache Spark en el clúster de Databricks. Ejecute un comando pySpark simple, comospark.range(1,10).show()
. Si no hay errores, se ha conectado correctamente.Consulte Análisis interactivo con el shell de Spark para obtener información sobre cómo usar el shell de Spark con Python para ejecutar comandos en el proceso.
Use la variable integrada
spark
para representar el elementoSparkSession
del clúster en ejecución, por ejemplo:>>> 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 el código de Python se ejecuta localmente, mientras que todo el código de PySpark que involucra operaciones de DataFrame se ejecuta en el clúster en el área de trabajo remota de Azure Databricks y las respuestas de ejecución se envían de vuelta al autor de la llamada local.
Para detener el shell de Spark, presiona
Ctrl + d
oCtrl + z
, o ejecute el comandoquit()
oexit()
.
Encabezados HTTP adicionales
Databricks Connect se comunica con los clústeres de Databricks mediante gRPC a través de HTTP/2.
Algunos usuarios avanzados pueden optar por instalar un servicio de proxy entre el cliente y el clúster de Azure Databricks para tener un mejor control sobre las solicitudes procedentes de sus clientes.
Los servidores proxy, en algunos casos, pueden requerir encabezados personalizados en las solicitudes HTTP.
El método headers()
se puede usar para agregar encabezados personalizados a sus solicitudes HTTP.
spark = DatabricksSession.builder.header('x-custom-header', 'value').getOrCreate()
Certificados
Si el clúster se basa en un certificado SSL/TLS personalizado para resolver un nombre de dominio completo (FQDN) del área de trabajo de Azure Databricks, debe establecer la variable de entorno GRPC_DEFAULT_SSL_ROOTS_FILE_PATH
en la máquina de desarrollo local. Esta variable de entorno debe establecerse en la ruta de acceso completa al certificado instalado en el clúster.
Por ejemplo, establezca esta variable de entorno en el código de Python de la siguiente manera:
import os
os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "/etc/ssl/certs/ca-bundle.crt"
Para ver otras formas de establecer variables de entorno, consulte la documentación del sistema operativo.
Registro y depuración de registros
Databricks Connect para Python genera registros estándar con registro de Python.
Los registros se emiten a la secuencia de errores estándar (stderr) y, de forma predeterminada, solo se emiten registros en el nivel WARN y superiores.
Establecer una variable de entorno SPARK_CONNECT_LOG_LEVEL=debug
modificará este valor predeterminado e imprimirá todos los mensajes de registro en el nivel de DEBUG
y superior.