Поделиться через


Расширенное использование Databricks Connect для Python

Примечание.

В этой статье описывается Databricks Connect for Databricks Runtime 14.0 и более поздних версий.

В этой статье описываются разделы, которые выходят за рамки базовой настройки Databricks Connect.

Настройка строка подключения Spark Connect

Помимо подключения к кластеру с помощью параметров, описанных в разделе "Настройка подключения к кластеру", более расширенный вариант подключения осуществляется с помощью строка подключения Spark Connect. Можно передать строку в remote функции или задать SPARK_REMOTE переменную среды.

Примечание.

Для подключения с помощью строка подключения Spark Connect можно использовать только проверку подлинности личного маркера доступа Databricks.

Чтобы задать строка подключения с помощью 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()

Кроме того, задайте SPARK_REMOTE переменную среды:

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

Затем инициализировать DatabricksSession класс следующим образом:

from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()

Оболочка Pyspark

Databricks Connect для Python поставляется с двоичным файлом pyspark , который является pySpark REPL (оболочка Spark), настроенной для использования Databricks Connect.

При запуске без дополнительных параметров оболочка получает учетные данные по умолчанию из среды (например, DATABRICKS_ переменные среды или DEFAULT профиль конфигурации), чтобы подключиться к кластеру Azure Databricks. Сведения о настройке подключения см. в разделе "Конфигурация вычислений" для Databricks Connect.

  1. Чтобы запустить оболочку Spark и подключить ее к работающему кластеру, выполните одну из следующих команд из активированной виртуальной среды Python:

    pyspark
    

    Появится оболочка Spark, например:

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

    После запуска spark оболочки объект доступен для выполнения команд Apache Spark в кластере Databricks. Выполните простую команду PySpark, например spark.range(1,10).show(). Если ошибки отсутствуют, вы успешно подключились.

  2. Чтобы узнать, как использовать оболочку Spark с Python для выполнения команд в вычислительных средах, обратитесь к интерактивному анализу с помощью Оболочки Spark.

    Используйте встроенную spark переменную для представления SparkSession в работающем кластере, например:

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

    Весь код Python выполняется локально, в то время как весь код PySpark с участием операций DataFrame выполняется в кластере в удаленной рабочей области Azure Databricks и ответы запуска отправляются обратно в локальный вызывающий объект.

  3. Чтобы остановить оболочку Spark, нажмите Ctrl + d или Ctrl + zвыполните команду или выполните командуquit().exit()

Дополнительные заголовки HTTP

Databricks Connect взаимодействует с кластерами Databricks через gRPC по протоколу HTTP/2.

Некоторые расширенные пользователи могут установить прокси-службу между клиентом и кластером Azure Databricks, чтобы лучше контролировать запросы, поступающие от своих клиентов.

В некоторых случаях прокси-серверы могут требовать пользовательские заголовки в HTTP-запросах.

Этот headers() метод можно использовать для добавления пользовательских заголовков в http-запросы.

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

Сертификаты

Если кластер использует пользовательский сертификат SSL/TLS для разрешения полного доменного имени рабочей области Azure Databricks (FQDN), необходимо задать переменную GRPC_DEFAULT_SSL_ROOTS_FILE_PATH среды на локальном компьютере разработки. Эта переменная среды должна иметь полный путь к установленному сертификату в кластере.

Например, вы задаете эту переменную среды в коде Python следующим образом:

import os

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

Другие способы задания переменных среды см. в документации операционной системы.

Ведение журнала и отладка журналов

Databricks Connect для Python создает журналы с помощью стандартного ведения журнала Python.

Журналы создаются в стандартном потоке ошибок (stderr) и по умолчанию создаются только журналы на уровне WARN и выше.

Установка переменной среды изменит этот параметр SPARK_CONNECT_LOG_LEVEL=debug по умолчанию и распечатает все сообщения журнала на DEBUG уровне и выше.