Aller au contenu principal

Databricks Connect pour Databricks Runtime 12.2 LTS et versions antérieures

important

Databricks Connect pour Databricks Runtime 12.2 LTS et versions antérieures est obsolète. Databricks Runtime 12.2 LTS et toutes les versions LTS antérieures ont atteint la fin du support. Utilisez Databricks Connect pour Databricks Runtime 13.3 LTS et versions ultérieures à la place. Pour plus d'informations sur la migration de Databricks Connect pour Databricks Runtime 12.2 LTS et versions antérieures vers Databricks Connect pour Databricks Runtime 13.3 LTS et versions ultérieures, consultez Migrer vers Databricks Connect pour Python ou Migrer vers Databricks Connect pour Scala.

Databricks Connect vous permet de connecter des IDEs populaires tels que Visual Studio Code et PyCharm, des serveurs de Notebook et d'autres applications personnalisées à des clusters Databricks.

Cet article explique comment fonctionne Databricks Connect, vous guide à travers les étapes pour commencer avec Databricks Connect, explique comment dépanner les problèmes qui peuvent survenir lors de l'utilisation de Databricks Connect, et les différences entre l'exécution avec Databricks Connect et l'exécution dans un Notebook Databricks.

Présentation

Databricks Connect est une bibliothèque cliente pour Databricks Runtime. Il vous permet d'écrire des jobs à l'aide des Spark APIs et de les exécuter à distance sur un cluster Databricks au lieu de la session Spark locale.

Par exemple, lorsque vous exécutez la commande DataFrame spark.read.format(...).load(...).groupBy(...).agg(...).show() à l'aide de Databricks Connect, la représentation logique de la commande est envoyée au serveur Spark s'exécutant dans Databricks pour être exécutée sur le cluster distant.

Avec Databricks Connect, vous pouvez :

  • Exécutez des Jobs Spark à grande échelle depuis n'importe quelle application Python, R, Scala ou Java. Partout où vous pouvez import pyspark, require(SparkR) ou import org.apache.spark, vous pouvez désormais exécuter des Jobs Spark directement depuis votre application, sans avoir besoin d'installer de plugins IDE ou d'utiliser des scripts de soumission Spark.
  • Parcourez et déboguez le code dans votre IDE même lorsque vous travaillez avec un cluster distant.
  • Itérez rapidement lors du développement de bibliothèques. Vous n'avez pas besoin de redémarrer le cluster après avoir modifié les dépendances des bibliothèques Python ou Java dans Databricks Connect, car chaque session client est isolée des autres dans le cluster.
  • Arrêtez les clusters inactifs sans perdre de travail. Étant donné que l'application client est découplée du cluster, elle n'est pas affectée par les redémarrages ou les mises à niveau du cluster, qui vous feraient normalement perdre toutes les variables, RDD et objets DataFrame définis dans un Notebook.
remarque

Pour le développement Python avec des requêtes SQL, Databricks vous recommande d'utiliser le Connecteur Databricks SQL pour Python plutôt que Databricks Connect. Le Connecteur Databricks SQL pour Python est plus facile à configurer que Databricks Connect. En outre, Databricks Connect analyse et planifie les exécutions de jobs sur votre machine locale, tandis que les jobs s'exécutent sur des ressources de compute à distance. Cela peut rendre particulièrement difficile de déboguer les erreurs d'exécution. Le connecteur Databricks SQL pour Python soumet les requêtes SQL directement aux ressources de compute à distance et récupère les résultats.

Exigences

Cette section répertorie les exigences pour Databricks Connect.

  • Seules les versions de Databricks Runtime suivantes sont prises en charge :

    • Databricks Runtime 12.2 LTS ML, Databricks Runtime 12.2 LTS
    • Databricks Runtime 11.3 LTS ML, Databricks Runtime 11.3 LTS
    • Databricks Runtime 10.4 LTS ML, Databricks Runtime 10.4 LTS
    • Databricks Runtime 9.1 LTS ML, Databricks Runtime 9.1 LTS
    • Databricks Runtime 7.3 LTS
  • Vous devez installer Python 3 sur votre machine de développement, et la version mineure de votre installation Python client doit être la même que la version mineure de Python de votre cluster Databricks. Le tableau suivant présente la version Python installée avec chaque Databricks Runtime.

    Version de Databricks Runtime

    Version de Python

    12.2 LTS ML, 12.2 LTS

    3.9

    11.3 LTS ML, 11.3 LTS

    3.9

    10.4 LTS ML, 10.4 LTS

    3,8

    9.1 LTS ML, 9.1 LTS

    3,8

    7.3 LTS

    3.7

    Version de Databricks Runtime

    Version de Python

    12.2 LTS ML, 12.2 LTS

    3.9

    11.3 LTS ML, 11.3 LTS

    3.9

    10.4 LTS ML, 10.4 LTS

    3,8

    9.1 LTS ML, 9.1 LTS

    3,8

    7.3 LTS

    3.7

    Databricks vous recommande vivement d'activer un environnement virtuel Python pour chaque version de Python que vous utilisez avec Databricks Connect. Les environnements virtuels Python permettent de s'assurer que vous utilisez les versions correctes de Python et de Databricks Connect ensemble. Cela peut aider à réduire le temps passé à résoudre les problèmes techniques connexes.

    Par exemple, si vous utilisez venv sur votre machine de développement et que votre cluster exécute Python 3,9, vous devez créer un environnement venv avec cette version. La commande d'exemple suivante génère les scripts pour activer un environnement venv avec Python 3,9, puis cette commande place ces scripts dans un dossier masqué nommé .venv dans le répertoire de travail actuel :

    Bash
    # Linux and macOS
    python3.9 -m venv ./.venv

    # Windows
    python3.9 -m venv .\.venv

    Pour utiliser ces scripts afin d'activer cet environnement venv, reportez-vous à Fonctionnement des venvs.

    À titre d'autre exemple, si vous utilisez Conda sur votre machine de développement et que votre cluster exécute Python 3.9, vous devez créer un environnement Conda avec cette version, par exemple :

    Bash
    conda create --name dbconnect python=3.9

    Pour activer l'environnement Conda avec ce nom d'environnement, exécutez conda activate dbconnect.

  • La version majeure et mineure du package Databricks Connect doit toujours correspondre à votre version de Databricks Runtime. Databricks vous recommande d'utiliser toujours le package le plus récent de Databricks Connect qui correspond à votre version de Databricks Runtime. Par exemple, lorsque vous utilisez un cluster Databricks Runtime 12.2 LTS, vous devez également utiliser le package databricks-connect==12.2.*.

remarque

Consultez les notes de publication de Databricks Connect pour obtenir la liste des versions de Databricks Connect et des mises à jour de maintenance disponibles.

  • Environnement d'exécution Java (Runtime) 8. Le client a été testé avec l'environnement d'exécution OpenJDK 8 JRE. Le client ne prend pas en charge Java 11.
remarque

Sur Windows, si vous voyez une erreur indiquant que Databricks Connect ne peut pas trouver winutils.exe, consultez Impossible de trouver winutils.exe sur Windows.

Configurer le client

Suivez les étapes suivantes pour configurer le client local pour Databricks Connect.

remarque

Avant de commencer à configurer le client Databricks Connect local, vous devez satisfaire aux exigences de Databricks Connect.

Étape 1 : installez le client Databricks Connect

  1. Une fois votre environnement virtuel activé, désinstallez PySpark, s'il est déjà installé, en exécutant la commande uninstall. Ceci est requis car le package databricks-connect est en conflit avec PySpark. Pour plus de détails, voir Installations PySpark conflictuelles. Pour vérifier si PySpark est déjà installé, exécutez la commande show.

    Bash
    # Is PySpark already installed?
    pip3 show pyspark

    # Uninstall PySpark
    pip3 uninstall pyspark
  2. Avec votre environnement virtuel toujours activé, installez le client Databricks Connect en exécutant la commande install. Utilisez l'option --upgrade pour mettre à niveau toute installation client existante vers la version spécifiée.

    Bash
    pip3 install --upgrade "databricks-connect==12.2.*"  # Or X.Y.* to match your cluster version.
remarque

Databricks recommande d'ajouter la notation « point-astérisque » pour spécifier databricks-connect==X.Y.* au lieu de databricks-connect=X.Y, afin de s'assurer que le package le plus récent est installé.

Étape 2 : Configurez les propriétés de connexion

  1. Collectez les propriétés de configuration suivantes.

    • L'URL du Workspace Databricks.

    • Votre jeton d'accès personnel Databricks.

    • L’ID de votre cluster. Vous pouvez obtenir l’ID de cluster à partir de l’URL. Ici, l'ID de cluster est 0304-201045-hoary804.

      ID de Cluster 2

    • Le port auquel Databricks Connect se connecte sur votre cluster. Le port default est 15001.

  2. Configurez la connexion comme suit.

    Vous pouvez utiliser la CLI, les configurations SQL ou les variables d'environnement. La précédence des méthodes de configuration de la plus élevée à la moins élevée est la suivante : clés de configuration SQL, CLI et variables d'environnement.

    • CLI

      1. Exécuter databricks-connect.
      Bash
      databricks-connect configure

      La licence affiche :

      Copyright (2018) Databricks, Inc.

      This library (the "Software") may not be used except in connection with the
      Licensee's use of the Databricks Platform Services pursuant to an Agreement
      ...
      1. Acceptez la licence et fournissez les valeurs de configuration. Pour **Databricks Host** et **Databricks Token**, saisissez l'URL du Workspace et le jeton d'accès personnel que vous avez notés à l'étape 1.
      Do you accept the above agreement? [y/N] y
      Set new config values (leave input empty to accept default):
      Databricks Host [no current value, must start with https://]: <databricks-url>
      Databricks Token [no current value]: <databricks-token>
      Cluster ID (e.g., 0921-001415-jelly628) [no current value]: <cluster-id>
      Org ID (Azure-only, see ?o=orgId in URL) [0]: <org-id>
      Port [15001]: <port>
    • Configurations SQL ou variables d'environnement. Le tableau suivant présente les clés de configuration SQL et les variables d'environnement qui correspondent aux propriétés de configuration que vous avez notées à l'étape 1. Pour définir une clé de configuration SQL, utilisez sql("set config=value"). Par exemple : sql("set spark.databricks.service.clusterId=0304-201045-abcdefgh").

      parameter

      Clé de configuration SQL

      Nom de la variable d'environnement

      Hôte Databricks

      spark.databricks.service.address

      DATABRICKS_ADDRESS

      Jeton Databricks

      spark.databricks.service.token

      DATABRICKS_API_TOKEN

      ID de cluster

      spark.databricks.service.clusterId

      DATABRICKS_CLUSTER_ID

      ID d'organisation

      spark.databricks.service.orgId

      DATABRICKS_ORG_ID

      Port

      spark.databricks.service.port

      DATABRICKS_PORT

      parameter

      Clé de configuration SQL

      Nom de la variable d'environnement

      Hôte Databricks

      spark.databricks.service.address

      DATABRICKS_ADDRESS

      Jeton Databricks

      spark.databricks.service.token

      DATABRICKS_API_TOKEN

      ID de cluster

      spark.databricks.service.clusterId

      DATABRICKS_CLUSTER_ID

      ID d'organisation

      spark.databricks.service.orgId

      DATABRICKS_ORG_ID

      Port

      spark.databricks.service.port

      DATABRICKS_PORT

  3. Avec votre environnement virtuel toujours activé, testez la connectivité à Databricks comme suit.

    Bash
    databricks-connect test

    Si le cluster que vous avez configuré n'est pas en cours d'exécution, le test start le cluster qui restera en cours d'exécution jusqu'à son délai d'arrêt automatique configuré. Le résultat doit être similaire à ce qui suit :

    * PySpark is installed at /.../.../pyspark
    * Checking java version
    java version "1.8..."
    Java(TM) SE Runtime Environment (build 1.8...)
    Java HotSpot(TM) 64-Bit Server VM (build 25..., mixed mode)
    * Testing scala command
    ../../.. ..:..:.. WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
    Setting default log level to "WARN".
    To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    ../../.. ..:..:.. WARN MetricsSystem: Using default name SparkStatusTracker for source because neither spark.metrics.namespace nor spark.app.id is set.
    ../../.. ..:..:.. WARN SparkServiceRPCClient: Now tracking server state for 5ab..., invalidating prev state
    ../../.. ..:..:.. WARN SparkServiceRPCClient: Syncing 129 files (176036 bytes) took 3003 ms
    Welcome to
    ____ __
    / __/__ ___ _____/ /__
    _\ \/ _ \/ _ `/ __/ '_/
    /___/ .__/\_,_/_/ /_/\_\ version 2...
    /_/

    Using Scala version 2.... (Java HotSpot(TM) 64-Bit Server VM, Java 1.8...)
    Type in expressions to have them evaluated.
    Type :help for more information.

    scala> spark.range(100).reduce(_ + _)
    Spark context Web UI available at https://...
    Spark context available as 'sc' (master = local[*], app id = local-...).
    Spark session available as 'spark'.
    View job details at <databricks-url>/?o=0#/setting/clusters/<cluster-id>/sparkUi
    View job details at <databricks-url>?o=0#/setting/clusters/<cluster-id>/sparkUi
    res0: Long = 4950

    scala> :quit

    * Testing python command
    ../../.. ..:..:.. WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
    Setting default log level to "WARN".
    To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    ../../.. ..:..:.. WARN MetricsSystem: Using default name SparkStatusTracker for source because neither spark.metrics.namespace nor spark.app.id is set.
    ../../.. ..:..:.. WARN SparkServiceRPCClient: Now tracking server state for 5ab.., invalidating prev state
    View job details at <databricks-url>/?o=0#/setting/clusters/<cluster-id>/sparkUi
  4. Si aucune erreur liée à la connexion n’est affichée (WARN messages sont acceptables), alors vous êtes connecté(e) avec succès.

Utiliser Databricks Connect

Cette section décrit comment configurer votre IDE ou serveur Notebook préféré pour utiliser le client pour Databricks Connect.

Dans cette section :

JupyterLab

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect avec JupyterLab et Python, suivez ces instructions.

  1. Pour installer JupyterLab, avec votre environnement virtuel Python activé, exécutez la commande suivante depuis votre terminal ou l'invite de commande :

    Bash
    pip3 install jupyterlab
  2. Pour start JupyterLab dans votre navigateur web, exécutez la commande suivante depuis votre environnement virtuel Python activé :

    Bash
    jupyter lab

    Si JupyterLab n'apparaît pas dans votre navigateur web, copiez l'URL qui commence par localhost ou 127.0.0.1 à partir de votre environnement virtuel, et saisissez-la dans la barre d'adresse de votre navigateur web.

  3. Créez un nouveau Notebook : dans JupyterLab, cliquez sur Fichier > Nouveau > Notebook dans le menu principal, sélectionnez Python 3 (ipykernel) et cliquez sur Sélectionner .

  4. Dans la première cellule du Notebook, saisissez soit l'exemple de code, soit votre propre code. Si vous utilisez votre propre code, vous devez au minimum instancier une instance de SparkSession.builder.getOrCreate(), comme indiqué dans l'exemple de code.

  5. Pour exécuter le Notebook, cliquez sur Run > Run All Cells .

  6. Pour déboguer le notebook, cliquez sur l'icône de bogue ( Activer le débogueur ) à côté de Python 3 (ipykernel) dans la barre d'outils du notebook. Définissez un ou plusieurs points d'arrêt, puis cliquez sur Run > Run All Cells .

  7. Pour arrêter JupyterLab, cliquez sur Fichier > Arrêter . Si le processus JupyterLab est toujours en cours d'exécution dans votre terminal ou l'invite de commande, arrêtez ce processus en appuyant sur Ctrl + c puis en saisissant y pour confirmer.

Pour des instructions de débogage plus spécifiques, consultez le débogueur.

Notebook Jupyter classique

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Le script de configuration pour Databricks Connect ajoute automatiquement le package à la configuration de votre projet. Pour commencer dans un noyau Python, exécutez :

Python
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

Pour activer le raccourci %sql pour l'exécution et la visualisation des requêtes SQL, utilisez l'extrait suivant :

Python
from IPython.core.magic import line_magic, line_cell_magic, Magics, magics_class

@magics_class
class DatabricksConnectMagics(Magics):

@line_cell_magic
def sql(self, line, cell=None):
if cell and line:
raise ValueError("Line must be empty for cell magic", line)
try:
from autovizwidget.widget.utils import display_dataframe
except ImportError:
print("Please run `pip install autovizwidget` to enable the visualization widget.")
display_dataframe = lambda x: x
return display_dataframe(self.get_spark().sql(cell or line).toPandas())

def get_spark(self):
user_ns = get_ipython().user_ns
if "spark" in user_ns:
return user_ns["spark"]
else:
from pyspark.sql import SparkSession
user_ns["spark"] = SparkSession.builder.getOrCreate()
return user_ns["spark"]

ip = get_ipython()
ip.register_magics(DatabricksConnectMagics)

Visual Studio Code

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect avec Visual Studio Code, procédez comme suit :

  1. Vérifiez que l'extension Python est installée.

  2. Ouvrez la palette de commandes ( Command+Shift+P sur macOS et Ctrl+Shift+P sur Windows/Linux).

  3. Sélectionner un interpréteur Python. Accédez à Code > Préférences > Paramètres , et choisissez les paramètres Python .

  4. Exécuter databricks-connect get-jar-dir.

  5. Ajoutez le répertoire renvoyé par la commande au JSON des paramètres utilisateur sous python.venvPath. Cela devrait être ajouté à la configuration Python.

  6. Désactivez le linter. Cliquez sur les sur le côté droit et modifier les paramètres JSON . Les paramètres modifiés sont les suivants :

    Configuration de VS Code

  7. Si vous exécutez avec un environnement virtuel, ce qui est la méthode recommandée pour développer en Python dans VS Code, dans la palette de commandes, tapez select python interpreter et pointez vers votre environnement qui correspond à la version Python de votre cluster.

    Sélectionner l&#39;interprète Python

    Par exemple, si votre cluster est Python 3.9, votre environnement de développement doit être Python 3.9.

    Version de Python

PyCharm

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Le script de configuration pour Databricks Connect ajoute automatiquement le package à la configuration de votre projet.

Clusters Python 3

  1. Lorsque vous créez un projet PyCharm, sélectionnez Interprète existant . Dans le menu déroulant, sélectionnez l'environnement Conda que vous avez créé (voir Exigences).

    Sélectionner l’interprète

  2. Accédez à **Exécuter > Modifier les configurations**.

  3. Ajoutez PYSPARK_PYTHON=python3 en tant que variable d'environnement.

    Configuration de clusters Python 3

SparkR et RStudio Desktop

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect avec SparkR et RStudio Desktop, procédez comme suit :

  1. download et décompressez la distribution Spark open source sur votre machine de développement. Choisissez la même version que celle de votre cluster Databricks (Hadoop 2.7).

  2. Exécutez databricks-connect get-jar-dir. Cette commande renvoie un chemin d’accès comme /usr/local/lib/python3.5/dist-packages/pyspark/jars. Copiez le chemin d'accès au répertoire parent du répertoire JAR, par exemple, /usr/local/lib/python3.5/dist-packages/pyspark qui est le SPARK_HOME répertoire.

  3. Configurez le chemin de la bibliothèque Spark et Spark Home en les ajoutant en haut de votre script R. Définissez <spark-lib-path> sur le répertoire où vous avez décompressé le package Spark open source à l'étape 1. Définissez <spark-home-path> sur le répertoire Databricks Connect de l'étape 2.

    R
    # Point to the OSS package path, e.g., /path/to/.../spark-2.4.0-bin-hadoop2.7
    library(SparkR, lib.loc = .libPaths(c(file.path('<spark-lib-path>', 'R', 'lib'), .libPaths())))

    # Point to the Databricks Connect PySpark installation, e.g., /path/to/.../pyspark
    Sys.setenv(SPARK_HOME = "<spark-home-path>")
  4. Lancez une session Spark et start running des commandes SparkR.

    R
    sparkR.session()

    df <- as.DataFrame(faithful)
    head(df)

    df1 <- dapply(df, function(x) { x }, schema(df))
    collect(df1)

sparklyr et RStudio Desktop

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

info

Aperçu

Cette fonctionnalité est en aperçu public.

Vous pouvez copier le code dépendant de Sparklyr que vous avez développé localement à l’aide de Databricks Connect et l’exécuter dans un Notebook Databricks ou un serveur RStudio hébergé dans votre Workspace Databricks avec des modifications de code minimales, voire aucune.

Dans cette section :

Exigences

  • sparklyr 1.2 ou version ultérieure.
  • Databricks Runtime 7.3 LTS ou version ultérieure avec la version correspondante de Databricks Connect.

Installer, configurer et utiliser sparklyr

  1. Dans RStudio Desktop, installez sparklyr 1.2 ou une version ultérieure depuis CRAN ou installez la dernière version maître depuis GitHub.

    R
    # Install from CRAN
    install.packages("sparklyr")

    # Or install the latest master version from GitHub
    install.packages("devtools")
    devtools::install_github("sparklyr/sparklyr")
  2. Activez l'environnement Python avec la version correcte de Databricks Connect installée et exécutez la commande suivante dans le terminal pour obtenir le <spark-home-path>:

    Bash
    databricks-connect get-spark-home
  3. Initiez une session Spark et start l'exécution des commandes sparklyr.

    R
    library(sparklyr)
    sc <- spark_connect(method = "databricks", spark_home = "<spark-home-path>")

    iris_tbl <- copy_to(sc, iris, overwrite = TRUE)

    library(dplyr)
    src_tbls(sc)

    iris_tbl %>% count
  4. Fermez la connexion.

    R
    spark_disconnect(sc)

Ressources

Pour en savoir plus, consultez le README de sparklyr sur GitHub.

Pour des exemples de code, consultez sparklyr.

Limitations de sparklyr et RStudio Desktop

Les fonctionnalités suivantes sont non prises en charge :

  • APIs de streaming sparklyr
  • APIs ML de sparklyr
  • les API broom
  • mode de sérialisation csv_file
  • Spark Submit

IntelliJ (Scala ou Java)

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect avec IntelliJ (Scala ou Java), procédez comme suit :

  1. Exécuter databricks-connect get-jar-dir.

  2. Faites pointer les dépendances vers le répertoire renvoyé par la commande. Accédez à Fichier > Structure du projet > Modules > Dépendances > signe « + » > JARs ou Répertoires .

    JARs IntelliJ

    Pour éviter les conflits, nous vous recommandons fortement de supprimer toute autre installation Spark de votre classpath. Si cela n'est pas possible, assurez-vous que les JAR que vous ajoutez se trouvent au début du classpath. En particulier, elles doivent être antérieures à toute autre version installée de Spark (sinon, vous utiliserez l'une de ces autres versions de Spark et l'exécuterez localement, ou vous obtiendrez une ClassDefNotFoundError).

  3. Vérifiez le paramètre de l'option d'atelier dans IntelliJ. La valeur default est Tout et entraînera des délais d’expiration du réseau si vous définissez des points d’arrêt pour le debugging. Définissez-le sur Thread pour éviter d’arrêter les threads réseau en arrière-plan.

    Fil de discussion IntelliJ

PyDev avec Eclipse

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect et PyDev avec Eclipse, suivez ces instructions.

  1. Start Eclipse.
  2. Créez un projet : cliquez sur Fichier > Nouveau > Projet > PyDev > Projet PyDev , puis cliquez sur Suivant .
  3. Spécifiez un **nom de projet**.
  4. Pour les Contenus de projet , spécifiez le chemin d’accès à votre environnement virtuel Python.
  5. Cliquez sur Veuillez configurer un interpréteur avant de continuer.
  6. Cliquez sur Configuration manuelle .
  7. Cliquez sur Nouveau > Parcourir pour python/pypy exe .
  8. Parcourez et sélectionnez le chemin complet vers l'interpréteur Python référencé à partir de l'environnement virtuel, puis cliquez sur Ouvrir .
  9. Dans la boîte de dialogue Sélectionner un interpréteur , cliquez sur OK .
  10. Dans la boîte de dialogue **Sélection requise**, cliquez sur **OK**.
  11. Dans la boîte de dialogue Préférences , cliquez sur Appliquer et fermer .
  12. Dans la boîte de dialogue PyDev Project , cliquez sur Finish .
  13. Cliquez sur Ouvrir la perspective .
  14. Ajoutez au projet un fichier de code Python (.py) qui contient soit l'exemple de code, soit votre propre code. Si vous utilisez votre propre code, vous devez au minimum instancier un SparkSession.builder.getOrCreate(), comme indiqué dans l'exemple de code.
  15. Le fichier de code Python étant ouvert, définissez des points d'arrêt là où vous souhaitez que votre code s'interrompe pendant l'exécution.
  16. Cliquez sur **Exécuter > Exécuter** ou **Exécuter > Déboguer**.

Pour des instructions d’exécution et de débogage plus spécifiques, consultez Exécution d’un programme.

Eclipse

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect et Eclipse, procédez comme suit :

  1. Exécuter databricks-connect get-jar-dir.

  2. Pointez la configuration des JAR externes vers le répertoire renvoyé par la commande. Accédez à Project menu > Properties > Java Build Path > Libraries > Add External Jars .

    Configuration de JAR externe Eclipse

    Pour éviter les conflits, nous vous recommandons fortement de supprimer toute autre installation Spark de votre classpath. Si cela n'est pas possible, assurez-vous que les JAR que vous ajoutez se trouvent au début du classpath. En particulier, elles doivent être antérieures à toute autre version installée de Spark (sinon, vous utiliserez l'une de ces autres versions de Spark et l'exécuterez localement, ou vous obtiendrez une ClassDefNotFoundError).

    Configuration Eclipse Spark

SBT

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect avec SBT, vous devez configurer votre fichier build.sbt pour le lier aux JARs Databricks Connect au lieu de la dépendance de bibliothèque Spark habituelle. Vous faites cela avec la directive unmanagedBase dans le fichier de build d'exemple suivant, qui suppose une application Scala qui a un objet principal com.example.Test :

build.sbt

name := "hello-world"
version := "1.0"
scalaVersion := "2.11.6"
// this should be set to the path returned by ``databricks-connect get-jar-dir``
unmanagedBase := new java.io.File("/usr/local/lib/python2.7/dist-packages/pyspark/jars")
mainClass := Some("com.example.Test")

Spark Shell

remarque

Avant de commencer à utiliser Databricks Connect, vous devez satisfaire aux prérequis et configurer le client pour Databricks Connect.

Pour utiliser Databricks Connect avec le Shell Spark et Python ou Scala, veuillez suivre ces instructions.

  1. Une fois votre environnement virtuel activé, assurez-vous que la commande databricks-connect test s'est exécutée avec succès dans Configurer le client.

  2. Une fois votre environnement virtuel activé, start le Shell Spark. Pour Python, exécutez la commande pyspark. Pour Scala, exécutez la commande spark-shell.

    Bash
    # For Python:
    pyspark
    Bash
    # For Scala:
    spark-shell
  3. Le shell Spark apparaît, par exemple pour Python :

    Python 3... (v3...)
    [Clang 6... (clang-6...)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    Setting default log level to "WARN".
    To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    ../../.. ..:..:.. WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Welcome to
    ____ __
    / __/__ ___ _____/ /__
    _\ \/ _ \/ _ `/ __/ '_/
    /__ / .__/\_,_/_/ /_/\_\ version 3....
    /_/

    Using Python version 3... (v3...)
    Spark context Web UI available at http://...:...
    Spark context available as 'sc' (master = local[*], app id = local-...).
    SparkSession available as 'spark'.
    >>>

    Pour Scala :

    Setting default log level to "WARN".
    To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
    ../../.. ..:..:.. WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Spark context Web UI available at http://...
    Spark context available as 'sc' (master = local[*], app id = local-...).
    Spark session available as 'spark'.
    Welcome to
    ____ __
    / __/__ ___ _____/ /__
    _\ \/ _ \/ _ `/ __/ '_/
    /___/ .__/\_,_/_/ /_/\_\ version 3...
    /_/

    Using Scala version 2... (OpenJDK 64-Bit Server VM, Java 1.8...)
    Type in expressions to have them evaluated.
    Type :help for more information.

    scala>
  4. Reportez-vous à Analyse interactive avec le Shell Spark pour plus d'informations sur l'utilisation du Shell Spark avec Python ou Scala afin d'exécuter des commandes sur votre cluster.

    Utilisez la variable spark intégrée pour représenter le SparkSession sur votre cluster en cours d'exécution, par exemple pour Python :

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

    Pour Scala :

    >>> val 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
  5. Pour arrêter le shell Spark, appuyez sur Ctrl + d ou Ctrl + z, ou exécutez la commande quit() ou exit() pour Python ou :q ou :quit pour Scala.

Exemples de code

Cet exemple de code simple query la table spécifiée, puis affiche ses 5 premières lignes. Pour utiliser une autre table, ajustez l'appel à spark.read.table.

Python
from pyspark.sql.session import SparkSession

spark = SparkSession.builder.getOrCreate()

df = spark.read.table("samples.nyctaxi.trips")
df.show(5)

Cet exemple de code plus long effectue les opérations suivantes :

  1. Crée un DataFrame en mémoire.
  2. Crée une table portant le nom zzz_demo_temps_table dans le schéma default. Si la table avec ce nom existe déjà, la table est d’abord supprimée. Pour utiliser un schéma ou une table différente, ajustez les appels à spark.sql, temps.write.saveAsTable ou les deux.
  3. Enregistre le contenu du DataFrame dans la table.
  4. Exécute une query SELECT sur le contenu de la table.
  5. Affiche le résultat de la query.
  6. Supprime la table.
Python
from pyspark.sql import SparkSession
from pyspark.sql.types import *
from datetime import date

spark = SparkSession.builder.appName('temps-demo').getOrCreate()

# Create a Spark DataFrame consisting of high and low temperatures
# by airport code and date.
schema = StructType([
StructField('AirportCode', StringType(), False),
StructField('Date', DateType(), False),
StructField('TempHighF', IntegerType(), False),
StructField('TempLowF', IntegerType(), False)
])

data = [
[ 'BLI', date(2021, 4, 3), 52, 43],
[ 'BLI', date(2021, 4, 2), 50, 38],
[ 'BLI', date(2021, 4, 1), 52, 41],
[ 'PDX', date(2021, 4, 3), 64, 45],
[ 'PDX', date(2021, 4, 2), 61, 41],
[ 'PDX', date(2021, 4, 1), 66, 39],
[ 'SEA', date(2021, 4, 3), 57, 43],
[ 'SEA', date(2021, 4, 2), 54, 39],
[ 'SEA', date(2021, 4, 1), 56, 41]
]

temps = spark.createDataFrame(data, schema)

# Create a table on the Databricks cluster and then fill
# the table with the DataFrame's contents.
# If the table already exists from a previous run,
# delete it first.
spark.sql('USE default')
spark.sql('DROP TABLE IF EXISTS zzz_demo_temps_table')
temps.write.saveAsTable('zzz_demo_temps_table')

# Query the table on the Databricks cluster, returning rows
# where the airport code is not BLI and the date is later
# than 2021-04-01. Group the results and order by high
# temperature in descending order.
df_temps = spark.sql("SELECT * FROM zzz_demo_temps_table " \
"WHERE AirportCode != 'BLI' AND Date > '2021-04-01' " \
"GROUP BY AirportCode, Date, TempHighF, TempLowF " \
"ORDER BY TempHighF DESC")
df_temps.show()

# Results:
#
# +-----------+----------+---------+--------+
# |AirportCode| Date|TempHighF|TempLowF|
# +-----------+----------+---------+--------+
# | PDX|2021-04-03| 64| 45|
# | PDX|2021-04-02| 61| 41|
# | SEA|2021-04-03| 57| 43|
# | SEA|2021-04-02| 54| 39|
# +-----------+----------+---------+--------+

# Clean up by deleting the table from the Databricks cluster.
spark.sql('DROP TABLE zzz_demo_temps_table')

Travailler avec les dépendances

Généralement, votre classe principale ou fichier Python aura d’autres fichiers JAR et fichiers de dépendance. Vous pouvez ajouter de tels fichiers JAR et de dépendance en appelant sparkContext.addJar("path-to-the-jar") ou sparkContext.addPyFile("path-to-the-file"). Vous pouvez également ajouter des fichiers Egg et des fichiers zip avec l’interface addPyFile(). Chaque fois que vous exécutez le code dans votre IDE, les fichiers JAR de dépendance et les fichiers sont installés sur le cluster.

Python
from lib import Foo
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

sc = spark.sparkContext
#sc.setLogLevel("INFO")

print("Testing simple count")
print(spark.range(100).count())

print("Testing addPyFile isolation")
sc.addPyFile("lib.py")
print(sc.parallelize(range(10)).map(lambda i: Foo(2)).collect())

class Foo(object):
def __init__(self, x):
self.x = x

UDF Python + Java

Python
from pyspark.sql import SparkSession
from pyspark.sql.column import _to_java_column, _to_seq, Column

## In this example, udf.jar contains compiled Java / Scala UDFs:
#package com.example
#
#import org.apache.spark.sql._
#import org.apache.spark.sql.expressions._
#import org.apache.spark.sql.functions.udf
#
#object Test {
# val plusOne: UserDefinedFunction = udf((i: Long) => i + 1)
#}

spark = SparkSession.builder \
.config("spark.jars", "/path/to/udf.jar") \
.getOrCreate()
sc = spark.sparkContext

def plus_one_udf(col):
f = sc._jvm.com.example.Test.plusOne()
return Column(f.apply(_to_seq(sc, [col], _to_java_column)))

sc._jsc.addJar("/path/to/udf.jar")
spark.range(100).withColumn("plusOne", plus_one_udf("id")).show()

Accédez aux infrastructures publiques Databricks

Cette section décrit comment utiliser Databricks Connect pour accéder aux utilitaires Databricks.

Vous pouvez utiliser les utilitaires dbutils.fs et dbutils.secrets du module de référence des utilitaires Databricks (dbutils). Les commandes prises en charge sont dbutils.fs.cp, dbutils.fs.head, dbutils.fs.ls, dbutils.fs.mkdirs, dbutils.fs.mv, dbutils.fs.put, dbutils.fs.rm, dbutils.secrets.get, dbutils.secrets.getBytes, dbutils.secrets.list, dbutils.secrets.listScopes. Consultez l’ utilitaire de système de fichiers (dbutils.fs) ou exécutez dbutils.fs.help() et l'utilitaire Secrets (dbutils.secrets) ou exécutez dbutils.secrets.help().

Python
from pyspark.sql import SparkSession
from pyspark.dbutils import DBUtils

spark = SparkSession.builder.getOrCreate()

dbutils = DBUtils(spark)
print(dbutils.fs.ls("dbfs:/"))
print(dbutils.secrets.listScopes())

Lorsque vous utilisez Databricks Runtime 7.3 LTS ou version supérieure, pour accéder au module DBUtils d'une manière qui fonctionne à la fois localement et dans les clusters Databricks, utilisez ce qui suit get_dbutils():

Python
def get_dbutils(spark):
from pyspark.dbutils import DBUtils
return DBUtils(spark)

Sinon, utilisez le get_dbutils() suivant :

Python
def get_dbutils(spark):
if spark.conf.get("spark.databricks.service.client.enabled") == "true":
from pyspark.dbutils import DBUtils
return DBUtils(spark)
else:
import IPython
return IPython.get_ipython().user_ns["dbutils"]

Copie de fichiers entre des systèmes de fichiers locaux et distants

Vous pouvez utiliser dbutils.fs pour copier des fichiers entre votre client et des systèmes de fichiers distants. Le schéma file:/ fait référence au système de fichiers local sur le client.

Python
from pyspark.dbutils import DBUtils
dbutils = DBUtils(spark)

dbutils.fs.cp('file:/home/user/data.csv', 'dbfs:/uploads')
dbutils.fs.cp('dbfs:/output/results.csv', 'file:/home/user/downloads/')

La taille maximale du fichier qui peut être transféré de cette manière est de 250 Mo.

Activer dbutils.secrets.get

En raison de restrictions de sécurité, la possibilité d’appeler dbutils.secrets.get est désactivée par default. Contactez le support Databricks pour activer cette fonctionnalité pour votre Workspace.

Définir les configurations Hadoop

Côté client, vous pouvez définir les configurations Hadoop à l'aide de l'API spark.conf.set, ce qui s'applique aux Opérations SQL et DataFrame. Les configurations Hadoop définies sur le sparkContext doivent être configurées dans la configuration du cluster ou à l'aide d'un Notebook. C'est parce que les configurations définies sur sparkContext ne sont pas liées aux sessions utilisateur, mais s'appliquent à l'ensemble du cluster.

Dépannage

Exécutez databricks-connect test pour vérifier les problèmes de connectivité. Cette section décrit certains problèmes courants que vous pouvez rencontrer avec Databricks Connect et comment les résoudre.

Dans cette section :

Incompatibilité de version Python

Vérifiez que la version de Python que vous utilisez en local a au moins la même version mineure que la version sur le cluster (par exemple, 3.9.16 par rapport à 3.9.15 est acceptable, 3.9 par rapport à 3.8 ne l'est pas).

Si vous avez plusieurs versions de Python installées localement, assurez-vous que Databricks Connect utilise la bonne en définissant la variable d'environnement PYSPARK_PYTHON (par exemple, PYSPARK_PYTHON=python3).

Serveur non activé

Assurez-vous que le cluster a le serveur Spark activé avec spark.databricks.service.server.enabled true. Vous devriez voir les lignes suivantes dans les logs du driver si :

../../.. ..:..:.. INFO SparkConfUtils$: Set spark config:
spark.databricks.service.server.enabled -> true
...
../../.. ..:..:.. INFO SparkContext: Loading Spark Service RPC Server
../../.. ..:..:.. INFO SparkServiceRPCServer:
Starting Spark Service RPC Server
../../.. ..:..:.. INFO Server: jetty-9...
../../.. ..:..:.. INFO AbstractConnector: Started ServerConnector@6a6c7f42
{HTTP/1.1,[http/1.1]}{0.0.0.0:15001}
../../.. ..:..:.. INFO Server: Started @5879ms

Installations PySpark en conflit

Le package databricks-connect est en conflit avec PySpark. Le fait d'avoir les deux installés provoquera des erreurs lors de l'initialisation du contexte Spark en Python. Cela peut se manifester de plusieurs manières, y compris par des erreurs « Stream corrupted » ou « classe introuvable ». Si PySpark est installé dans votre environnement Python, assurez-vous qu'il est désinstallé avant d'installer databricks-connect. Après la désinstallation de PySpark, assurez-vous de réinstaller complètement le package Databricks Connect :

Bash
pip3 uninstall pyspark
pip3 uninstall databricks-connect
pip3 install --upgrade "databricks-connect==12.2.*" # or X.Y.* to match your specific cluster version.

En conflit SPARK_HOME

Si vous avez déjà utilisé Spark sur votre machine, votre IDE peut être configuré pour utiliser l'une de ces autres versions de Spark plutôt que le Spark de Databricks Connect. Cela peut se manifester de plusieurs manières, notamment par des erreurs « stream corrompu » ou « classe introuvable ». Vous pouvez voir quelle version de Spark est utilisée en vérifiant la valeur de la variable d'environnement SPARK_HOME :

Python
import os
print(os.environ['SPARK_HOME'])

Résolution

Si SPARK_HOME est défini sur une version de Spark autre que celle du client, vous devriez annuler la variable SPARK_HOME et réessayer.

Vérifiez les paramètres de variable d'environnement de votre IDE, votre fichier .bashrc, .zshrc ou .bash_profile, et tout autre endroit où les variables d'environnement pourraient être définies. Vous devrez très probablement quitter et redémarrer votre IDE pour purger l'ancien état, et vous pourriez même avoir besoin de créer un nouveau projet si le problème persiste.

Vous ne devriez pas avoir besoin de définir SPARK_HOME à une nouvelle valeur ; le désactiver devrait être suffisant.

Entrée PATH en conflit ou manquante pour les binaires

Il est possible que votre PATH soit configuré de telle sorte que des commandes comme spark-shell exécutent un autre binaire précédemment installé au lieu de celui fourni avec Databricks Connect. Cela peut entraîner l'échec de databricks-connect test. Vous devez vous assurer que les binaires de Databricks Connect ont la priorité, ou supprimer ceux précédemment installés.

Si vous ne pouvez pas exécuter des commandes comme spark-shell, il est également possible que votre PATH n’ait pas été configuré automatiquement par pip3 install, et vous devrez ajouter manuellement le répertoire d’installation bin à votre PATH. Il est possible d’utiliser Databricks Connect avec les IDE, même si cela n’est pas configuré. Cependant, la commande databricks-connect test ne fonctionnera pas.

Paramètres de sérialisation en conflit sur le cluster

Si vous voyez des erreurs « stream corrupted » lors de l’exécution de databricks-connect test, cela peut être dû à des configurations de sérialisation des clusters incompatibles. Par exemple, la définition de la configuration spark.io.compression.codec peut entraîner ce problème. Pour résoudre ce problème, envisagez de supprimer ces configurations des paramètres du cluster, ou de définir la configuration dans le client Databricks Connect.

Impossible de trouver winutils.exe sur Windows

Si vous utilisez Databricks Connect sur Windows et que vous voyez :

ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

Suivez les instructions pour configurer le chemin Hadoop sur Windows.

La syntaxe du nom de fichier, du nom de répertoire ou de l'étiquette de volume est incorrecte sur Windows

Si vous utilisez Windows et Databricks Connect et que vous voyez :

The filename, directory name, or volume label syntax is incorrect.

Java ou Databricks Connect ont été installés dans un répertoire avec un espace dans votre chemin. Vous pouvez contourner ce problème en l'installant dans un chemin de répertoire sans espaces, ou en configurant votre chemin d'accès à l'aide du formulaire de nom court.

Limitations

  • Unity Catalog.

  • Structured Streaming.

  • Exécuter du code arbitraire qui ne fait pas partie d'un job Spark sur le cluster distant.

  • Les APIs natives Scala, Python et R pour les opérations de table Delta (par exemple, DeltaTable.forPath) ne sont pas prises en charge. Cependant, l’API SQL (spark.sql(...)) avec les opérations Delta Lake et l’API Spark (par exemple, spark.read.load) sur les tables Delta sont toutes deux prises en charge.

  • Copier dans.

  • Utilisation des fonctions SQL, des UDF Python ou Scala qui font partie du catalogue du serveur. Cependant, les UDF Scala et Python introduites localement fonctionnent.

  • Apache Zeppelin 0.7.x et versions antérieures.

  • Connexion aux clusters avec le contrôle d'accès aux tables.

  • Connexion aux clusters avec l’isolation des processus activée (en d’autres termes, lorsque spark.databricks.pyspark.enableProcessIsolation est défini sur true).

  • Commande SQL Delta CLONE.

  • Vues temporaires globales.

  • Koalas et pyspark.pandas.

  • CREATE TABLE table AS SELECT ... Les commandes SQL ne fonctionnent pas toujours. Au lieu de cela, utilisez spark.sql("SELECT ...").write.saveAsTable("table").

  • La référence Databricks Utilities (dbutils) suivante:

  • Catalogue AWS Glue