Share via


Databricks Csatlakozás a Databricks Runtime 12.2 LTS-hez és alább

Feljegyzés

A Databricks Csatlakozás a Databricks Runtime 13.0-s és újabb verziókhoz a Databricks Csatlakozás használatát javasolja.

A Databricks nem tervez új funkciókat a Databricks Csatlakozás a Databricks Runtime 12.2 LTS-hez és az alábbi verziókhoz.

A Databricks Csatlakozás lehetővé teszi népszerű azonosítók, például a Visual Studio Code és a PyCharm, a notebook-kiszolgálók és más egyéni alkalmazások Azure Databricks-fürtökhöz való csatlakoztatását.

Ez a cikk ismerteti a Databricks Csatlakozás működését, végigvezeti a Databricks Csatlakozás használatának első lépésein, ismerteti a Databricks Csatlakozás használatakor felmerülő problémák elhárítását, valamint a Databricks Csatlakozás és az Azure Databricks-jegyzetfüzetekben való futtatás közötti különbségeket.

Áttekintés

A Databricks Csatlakozás a Databricks Runtime ügyfélkódtára. Lehetővé teszi a feladatok Spark API-k használatával történő írását és távoli futtatását egy Azure Databricks-fürtön a helyi Spark-munkamenet helyett.

Ha például a DataFrame parancsot spark.read.format(...).load(...).groupBy(...).agg(...).show() a Databricks Csatlakozás használatával futtatja, a rendszer elküldi a parancs logikai ábrázolását az Azure Databricksben futó Spark-kiszolgálónak a távoli fürt végrehajtásához.

A Databricks Csatlakozás a következőt teheti:

  • Nagy méretű Spark-feladatokat futtathat bármilyen Python-, R-, Scala- vagy Java-alkalmazásból. Bárhol futtathat import pysparkrequire(SparkR) Spark-feladatokat közvetlenül az alkalmazásból anélkül, hogy ide beépülő modulokat kellene telepítenie, vagy import org.apache.sparkSpark-beküldési szkripteket kellene használnia.
  • A kód hibakeresése és végrehajtása az IDE-ben akkor is, ha távoli fürttel dolgozik.
  • A kódtárak fejlesztésekor gyorsan iterál. A Databricks-Csatlakozás Python- vagy Java-kódtár-függőségeinek módosítása után nem kell újraindítania a fürtöt, mert minden ügyfél-munkamenet el van különítve egymástól a fürtben.
  • Inaktív fürtök leállítása a munka elvesztése nélkül. Mivel az ügyfélalkalmazás leválasztva van a fürtről, a fürt újraindítása vagy frissítései nem érintik, ami általában a jegyzetfüzetben definiált összes változót, RDD-t és DataFrame-objektumot elveszíti.

Feljegyzés

Az SQL-lekérdezésekkel történő Python-fejlesztéshez a Databricks azt javasolja, hogy a Databricks SQL Csatlakozás ort használja a Pythonhoz a Databricks Csatlakozás helyett. A Pythonhoz készült Databricks SQL Csatlakozás or beállítása egyszerűbb, mint a Databricks Csatlakozás. Emellett a Databricks Csatlakozás elemzési és tervfeladatok a helyi gépen futnak, míg a feladatok távoli számítási erőforrásokon futnak. Ez különösen megnehezítheti a futtatókörnyezeti hibák hibakeresését. A Pythonhoz készült Databricks SQL Csatlakozás or sql-lekérdezéseket küld közvetlenül távoli számítási erőforrásoknak, és lekéri az eredményeket.

Követelmények

Ez a szakasz a Databricks Csatlakozás követelményeit sorolja fel.

  • Csak a következő Databricks Runtime-verziók támogatottak:

    • 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
  • Telepítenie kell a Python 3-at a fejlesztői gépen, és az ügyfél Python-telepítésének alverziójának meg kell egyeznie az Azure Databricks-fürt al Python-verziójával. Az alábbi táblázat az egyes Databricks Runtime-okkal telepített Python-verziót mutatja be.

    Databricks Runtime verzió Python-verzió
    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

    A Databricks határozottan javasolja, hogy a Databricks Csatlakozás minden Egyes Python-verzióhoz aktiváljon egy Python virtuális környezetet. A Python virtuális környezetek segítségével gondoskodhat arról, hogy a Python és a Databricks megfelelő verzióit használja együtt Csatlakozás. Ez segíthet csökkenteni a kapcsolódó technikai problémák megoldásával töltött időt.

    Ha például venv-t használ a fejlesztői gépen, és a fürt Python 3.9-et futtat, létre kell hoznia egy venv környezetet ezzel a verzióval. Az alábbi példaparancs létrehozza a szkripteket, hogy aktiváljanak egy környezetet a venv Python 3.9-es verzióval, és ez a parancs ezután az aktuális munkakönyvtárban elnevezett .venv rejtett mappába helyezi ezeket a szkripteket:

    # Linux and macOS
    python3.9 -m venv ./.venv
    
    # Windows
    python3.9 -m venv .\.venv
    

    Ha ezeket a szkripteket szeretné használni a venv környezet aktiválásához, tekintse meg a venvs működésének módját.

    Ha például a Fejlesztőgépen használja a Condát , és a fürt Python 3.9-et futtat, létre kell hoznia egy Conda-környezetet az adott verzióval, például:

    conda create --name dbconnect python=3.9
    

    Ha ezzel a környezetnévvel szeretné aktiválni a Conda-környezetet, futtassa a következőt conda activate dbconnect: .

  • A Databricks Connect-csomag fő- és alverziójának mindig egyeznie kell a Databricks Runtime verziójával. A Databricks azt javasolja, hogy mindig a Databricks-Csatlakozás legújabb csomagját használja, amely megfelel a Databricks Runtime verziójának. Ha például Databricks Runtime 12.2 LTS-fürtöt használ, a databricks-connect==12.2.* csomagot is használnia kell.

    Feljegyzés

    Az elérhető Databricks Csatlakozás kiadások és karbantartási frissítések listáját a Databricks Csatlakozás kibocsátási megjegyzéseiben találja.

  • Java Runtime Environment (JRE) 8. Az ügyfelet az OpenJDK 8 JRE-vel teszteltük. Az ügyfél nem támogatja a Java 11-et.

Feljegyzés

Windows rendszeren, ha olyan hibát lát, amelyet a Databricks Csatlakozás nem találwinutils.exe, olvassa el a Nem található winutils.exe a Windowsban című témakört.

Az ügyfél beállítása

Hajtsa végre az alábbi lépéseket a Databricks Csatlakozás helyi ügyfélének beállításához.

Feljegyzés

A helyi Databricks Csatlakozás-ügyfél beállítása előtt meg kell felelnie a Databricks Csatlakozás követelményeinek.

1. lépés: A Databricks Csatlakozás-ügyfél telepítése

  1. Ha a virtuális környezet aktiválva van, távolítsa el a PySparkot, ha már telepítve van, a uninstall parancs futtatásával. Erre azért van szükség, mert a csomag ütközik a databricks-connect PySparkkal. További részletekért lásd : Ütköző PySpark-telepítések. Annak ellenőrzéséhez, hogy a PySpark már telepítve van-e, futtassa a show parancsot.

    # Is PySpark already installed?
    pip3 show pyspark
    
    # Uninstall PySpark
    pip3 uninstall pyspark
    
  2. Ha a virtuális környezet továbbra is aktiválva van, telepítse a Databricks Csatlakozás-ügyfelet a install parancs futtatásával. Ezzel a --upgrade beállítással frissítheti a meglévő ügyféltelepítéseket a megadott verzióra.

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

    Feljegyzés

    A Databricks azt javasolja, hogy a "pont-csillag" jelölést ahelyett adja meg databricks-connect==X.Y.*databricks-connect=X.Y, hogy a legújabb csomag telepítve legyen.

2. lépés: Kapcsolat tulajdonságainak konfigurálása

  1. Gyűjtse össze a következő konfigurációs tulajdonságokat.

  2. Konfigurálja a kapcsolatot az alábbiak szerint.

    Használhatja a parancssori felületet, az SQL-konfigurációkat vagy a környezeti változókat. A konfigurációs módszerek elsőbbsége a legmagasabbtól a legalacsonyabbig a következő: SQL konfigurációs kulcsok, parancssori felület és környezeti változók.

    • parancssori felület

      1. Futtassa az databricks-connect parancsot.

        databricks-connect configure
        

        A licenc a következőt jeleníti meg:

        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
          ...
        
      2. Fogadja el a licencet, és adja meg a konfigurációs értékeket. A Databricks Host és a Databricks Token esetében adja meg a munkaterület URL-címét és az 1. lépésben feljegyzett személyes hozzáférési jogkivonatot.

        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>
        

        Ha azt jelzi, hogy a Microsoft Entra ID-jogkivonat túl hosszú, üresen hagyhatja a Databricks-jogkivonat mezőt, és manuálisan beírhatja a jogkivonatot ~/.databricks-connect.

    • SQL-konfigurációk vagy környezeti változók. Az alábbi táblázat az SQL konfigurációs kulcsait és az 1. lépésben feljegyzett konfigurációs tulajdonságoknak megfelelő környezeti változókat mutatja be. SQL-konfigurációs kulcs beállításához használja a következőt sql("set config=value"): . Például: sql("set spark.databricks.service.clusterId=0304-201045-abcdefgh")

      Paraméter SQL konfigurációs kulcs Környezeti változó neve
      Databricks-gazdagép spark.databricks.service.address DATABRICKS_ADDRESS
      Databricks-jogkivonat spark.databricks.service.token DATABRICKS_API_TOKEN
      Fürtazonosító spark.databricks.service.clusterId DATABRICKS_CLUSTER_ID
      Szervezeti azonosító spark.databricks.service.orgId DATABRICKS_ORG_ID
      Kikötő spark.databricks.service.port DATABRICKS_PORT
  3. Ha a virtuális környezet továbbra is aktiválva van, tesztelje az Azure Databrickshez való kapcsolódást az alábbiak szerint.

    databricks-connect test
    

    Ha a konfigurált fürt nem fut, a teszt elindítja a fürtöt, amely a konfigurált automatikus kifutási időig fut. A kimenetnek a következőképpen kell kinéznie:

    * 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. Ha nem jelennek meg kapcsolattal kapcsolatos hibák (WARN az üzenetek rendben vannak), akkor sikeresen csatlakozott.

A Databricks Csatlakozás használata

A szakasz azt ismerteti, hogyan konfigurálhatja az előnyben részesített IDE- vagy notebookkiszolgálót az ügyfél Databricks-Csatlakozás való használatára.

Ebben a szakaszban:

JupyterLab

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás a JupyterLab és a Python használatával való használatához kövesse az alábbi utasításokat.

  1. A JupyterLab telepítéséhez a Python virtuális környezet aktiválásával futtassa a következő parancsot a terminálból vagy a parancssorból:

    pip3 install jupyterlab
    
  2. A JupyterLab webböngészőben való elindításához futtassa az alábbi parancsot az aktivált Python virtuális környezetből:

    jupyter lab
    

    Ha a JupyterLab nem jelenik meg a webböngészőben, másolja ki a virtuális környezetből kiinduló localhost VAGY 127.0.0.1 onnan származó URL-címet, és írja be a webböngésző címsorába.

  3. Hozzon létre egy új jegyzetfüzetet: a JupyterLab-ban kattintson a főmenü Új > jegyzetfüzet fájlja > elemére, válassza a Python 3 (ipykernel) lehetőséget, majd kattintson a Kiválasztás gombra.

  4. A jegyzetfüzet első cellájába írja be a példakódot vagy a saját kódját. Ha saját kódot használ, legalább példányt kell létrehoznia SparkSession.builder.getOrCreate()a példában látható módon.

  5. A jegyzetfüzet futtatásához kattintson az Összes cella futtatása parancsra>.

  6. A jegyzetfüzet hibakereséséhez kattintson a Python 3 (ipykernel) melletti hiba (Hibakereső engedélyezése) ikonra a jegyzetfüzet eszköztárában. Állítson be egy vagy több töréspontot, majd kattintson az Összes cella futtatása parancsra>.

  7. A JupyterLab leállításához kattintson a Fájl > leállítása elemre. Ha a JupyterLab-folyamat továbbra is fut a terminálban vagy a parancssorban, állítsa le ezt a folyamatot a megerősítéshez nyomja Ctrl + c le, majd írja be y .

Részletesebb hibakeresési utasításokért lásd : Hibakereső.

Klasszikus Jupyter Notebook

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks konfigurációs szkriptje Csatlakozás automatikusan hozzáadja a csomagot a projektkonfigurációhoz. Python-kernel használatának megkezdéséhez futtassa a következőt:

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

Az SQL-lekérdezések futtatásához és vizualizációjához használja %sql a következő kódrészletet:

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

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás Visual Studio Code-tal való használatához tegye a következőket:

  1. Ellenőrizze, hogy telepítve van-e a Python-bővítmény .

  2. Nyissa meg a parancskatalógust (Command+Shift+P macOS rendszeren és Ctrl+Shift+P Windows/Linux rendszeren).

  3. Válasszon egy Python-értelmezőt. Nyissa meg a Kódbeállítások >> Gépház lehetőséget, és válassza a Python-beállításokat.

  4. Futtassa az databricks-connect get-jar-dir parancsot.

  5. Adja hozzá a parancsból visszaadott könyvtárat a Felhasználó Gépház JSON-fájlhoz a következő alattpython.venvPath: . Ezt hozzá kell adni a Python-konfigurációhoz.

  6. Tiltsa le a lintert. Kattintson a jobb oldalon található ... elemre, és szerkessze a json-beállításokat. A módosított beállítások a következők:

    VS Code configuration

  7. Ha virtuális környezettel fut, amely a Python vs Code-ban való fejlesztésének ajánlott módja, a parancskatalógus típusában select python interpreter mutasson a környezetére, amely megfelel a fürt Python-verziójának.

    Select Python interpreter

    Ha például a fürt Python 3.9, a fejlesztői környezetnek Python 3.9-nek kell lennie.

    Python version

PyCharm

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks konfigurációs szkriptje Csatlakozás automatikusan hozzáadja a csomagot a projektkonfigurációhoz.

Python 3-fürtök

  1. PyCharm-projekt létrehozásakor válassza a Meglévő értelmező lehetőséget. A legördülő menüben válassza ki a létrehozott Conda-környezetet (lásd: Követelmények).

    Select interpreter

  2. Nyissa meg a Konfigurációk szerkesztése parancsot>.

  3. Hozzáadás PYSPARK_PYTHON=python3 környezeti változóként.

    Python 3 cluster configuration

SparkR és RStudio Desktop

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás SparkR és RStudio Desktop használatával való használatához tegye a következőket:

  1. Töltse le és csomagolja ki a nyílt forráskód Spark-disztribúciót a fejlesztői gépre. Válassza ki ugyanazt a verziót, mint az Azure Databricks-fürtben (Hadoop 2.7).

  2. Futtassa az databricks-connect get-jar-dir parancsot. Ez a parancs egy olyan elérési utat ad vissza, mint a /usr/local/lib/python3.5/dist-packages/pyspark/jars. Másolja egy könyvtár elérési útját a JAR könyvtár elérési útja fölé , /usr/local/lib/python3.5/dist-packages/pysparkpéldául a SPARK_HOME könyvtárat.

  3. Konfigurálja a Spark lib elérési útját és a Spark kezdőlapját úgy, hogy hozzáadja őket az R-szkript tetejére. Állítsa be <spark-lib-path> azt a könyvtárat, ahol kicsomagolta a nyílt forráskód Spark-csomagot az 1. lépésben. Állítsa a <spark-home-path> Databricks Csatlakozás könyvtárra a 2. lépésben.

    # 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. Indítsa el a Spark-munkamenetet, és indítsa el a SparkR-parancsok futtatását.

    sparkR.session()
    
    df <- as.DataFrame(faithful)
    head(df)
    
    df1 <- dapply(df, function(x) { x }, schema(df))
    collect(df1)
    

sparklyr és RStudio Desktop

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

Fontos

Ez a funkció a nyilvános előzetes verzióban érhető el.

A Databricks Csatlakozás használatával helyileg kifejlesztett sparklyr-függő kódot másolhatja, és futtathatja egy Azure Databricks-jegyzetfüzetben vagy az Azure Databricks-munkaterületen üzemeltetett RStudio-kiszolgálón minimális vagy semmilyen kódmódosítás nélkül.

Ebben a szakaszban:

Követelmények

  • sparklyr 1.2 vagy újabb.
  • A Databricks Runtime 7.3 LTS vagy újabb verziója a Databricks Csatlakozás megfelelő verziójával.

Sparklyr telepítése, konfigurálása és használata

  1. Az RStudio Desktopban telepítse a Sparklyr 1.2-es vagy újabb verzióját a CRAN-ból, vagy telepítse a GitHub legújabb főverzióit.

    # Install from CRAN
    install.packages("sparklyr")
    
    # Or install the latest master version from GitHub
    install.packages("devtools")
    devtools::install_github("sparklyr/sparklyr")
    
  2. Aktiválja a Python-környezetet a Databricks megfelelő verziójával, Csatlakozás telepítve van, és futtassa a következő parancsot a terminálban a <spark-home-path>következő parancs lekéréséhez:

    databricks-connect get-spark-home
    
  3. Indítsa el a Spark-munkamenetet, és indítsa el a Sparklyr-parancsok futtatását.

    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. Zárja be a kapcsolatot.

    spark_disconnect(sc)
    

Források

További információ: sparklyr GitHub README.

A kód példákat a Sparklyrben talál.

sparklyr és RStudio Desktop korlátozások

A következő funkciók nem támogatottak:

  • sparklyr streaming API-k
  • sparklyr ML API-k
  • seprű API-k
  • szerializálási mód csv_file
  • spark submit

IntelliJ (Scala vagy Java)

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás IntelliJ-vel (Scala vagy Java) való használatához tegye a következőket:

  1. Futtassa az databricks-connect get-jar-dir parancsot.

  2. A függőségeket a parancsból visszaadott könyvtárra irányítja. Nyissa meg a File > Project Structure Modules Dependencies '+' sign > JARs vagy Directories (Fájlprojekt-struktúramodulok >> függőségei > ) elemet.

    IntelliJ JARs

    Az ütközések elkerülése érdekében javasoljuk, hogy távolítsa el a többi Spark-telepítést az osztályútról. Ha ez nem lehetséges, győződjön meg arról, hogy a hozzáadott JAR-ek az osztályút elején vannak. Ezeknek különösen a Spark bármely más telepített verzióját kell megelőzniük (ellenkező esetben a többi Spark-verzió egyikét fogja használni, és helyileg kell futtatnia, vagy dobnia kell egy ClassDefNotFoundError).

  3. Ellenőrizze az IntelliJ-ben a különkiállítás beállítását. Az alapértelmezett érték az Összes , és hálózati időtúllépést okoz, ha töréspontokat állít be a hibakereséshez. Állítsa szálra, hogy ne állítsa le a háttérben futó hálózati szálakat.

    IntelliJ Thread

PyDev és Eclipse

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás és PyDev Eclipse-hez való használatához kövesse az alábbi utasításokat.

  1. Indítsa el az Eclipse-et.
  2. Projekt létrehozása: kattintson a File > New Project PyDev > PyDev Project(Új > projekt>) gombra, majd a Tovább gombra.
  3. Adjon meg egy projektnevet.
  4. A Project tartalmához adja meg a Python virtuális környezet elérési útját.
  5. A folytatás előtt kattintson a Tolmács konfigurálása gombra.
  6. Kattintson a Manuális konfiguráció elemre.
  7. Kattintson a Python/pypy exe új > tallózása parancsra.
  8. Keresse meg és válassza ki a virtuális környezetből hivatkozott Python-értelmező teljes elérési útját, majd kattintson a Megnyitás gombra.
  9. A Tolmács kiválasztása párbeszédpanelen kattintson az OK gombra.
  10. A Kijelöléshez szükséges párbeszédpanelen kattintson az OK gombra.
  11. A Beállítások párbeszédpanelen kattintson az Alkalmaz és a Bezárás gombra.
  12. A PyDev Project párbeszédpanelen kattintson a Befejezés gombra.
  13. Kattintson a Perspektíva megnyitása gombra.
  14. Adjon hozzá egy Python-kódfájlt (.py) a projekthez, amely a példakódot vagy a saját kódját tartalmazza. Ha saját kódot használ, legalább példányt kell létrehoznia SparkSession.builder.getOrCreate()a példában látható módon.
  15. Ha meg van nyitva a Python-kódfájl, állítsa be azokat a töréspontokat, ahol azt szeretné, hogy a kód futás közben szüneteljen.
  16. Kattintson a Futtatás> vagy hibakeresés futtatása parancsra>.

A konkrétabb futtatási és hibakeresési utasításokért tekintse meg a Program futtatása című témakört.

Eclipse

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás és az Eclipse használatához tegye a következőket:

  1. Futtassa az databricks-connect get-jar-dir parancsot.

  2. A külső JAR-konfigurációt a parancsból visszaadott könyvtárra irányítja. Lépjen a Project menü > Tulajdonságok > Java buildelési útvonalkódtárai > külső jarok > hozzáadása parancsára.

    Eclipse external JAR configuration

    Az ütközések elkerülése érdekében javasoljuk, hogy távolítsa el a többi Spark-telepítést az osztályútról. Ha ez nem lehetséges, győződjön meg arról, hogy a hozzáadott JAR-ek az osztályút elején vannak. Ezeknek különösen a Spark bármely más telepített verzióját kell megelőzniük (ellenkező esetben a többi Spark-verzió egyikét fogja használni, és helyileg kell futtatnia, vagy dobnia kell egy ClassDefNotFoundError).

    Eclipse Spark configuration

SBT

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás SBT-vel való használatához úgy kell konfigurálnia a build.sbt fájlt, hogy a szokásos Spark-kódtár-függőség helyett a Databricks Csatlakozás JARs-hez kapcsolódjon. Ezt a unmanagedBase következő példa buildfájlban található irányelvvel teheti meg, amely egy fő objektummal rendelkező com.example.Test Scala-alkalmazást feltételez:

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

Feljegyzés

A Databricks Csatlakozás használatának megkezdése előtt meg kell felelnie a követelményeknek, és be kell állítania az ügyfelet a Databricks Csatlakozás számára.

A Databricks Csatlakozás Spark-felülettel és Pythonnal vagy Scalával való használatához kövesse az alábbi utasításokat.

  1. A virtuális környezet aktiválásával győződjön meg arról, hogy a databricks-connect test parancs sikeresen futott az ügyfél beállításában.

  2. A virtuális környezet aktiválásával indítsa el a Spark-rendszerhéjat. Python esetén futtassa a pyspark parancsot. Scala esetén futtassa a spark-shell parancsot.

    # For Python:
    pyspark
    
    # For Scala:
    spark-shell
    
  3. Megjelenik a Spark-rendszerhéj, például Python esetén:

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

    Scala esetén:

    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. A Spark Shell interaktív elemzésében megtudhatja, hogyan futtathat parancsokat a Spark-rendszerhéj pythonnal vagy Scalával a fürtön.

    A beépített spark változóval jelölheti a SparkSession futó fürtön, például a Pythonban:

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

    Scala esetén:

    >>> 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. A Spark-rendszerhéj leállításához nyomja le Ctrl + d vagy Ctrl + zfuttassa a parancsot quit() , a exit() Pythont vagy :q:quit a Scalát.

Példakódok

Ez az egyszerű példakód lekérdezi a megadott táblát, majd megjeleníti a megadott tábla első 5 sorát. Ha másik táblát szeretne használni, módosítsa a hívást a következőre spark.read.table: .

from pyspark.sql.session import SparkSession

spark = SparkSession.builder.getOrCreate()

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

Ez a hosszabb példakód a következőket teszi:

  1. Létrehoz egy memóriabeli DataFrame-et.
  2. Létrehoz egy táblát a zzz_demo_temps_table sémán belül default . Ha már létezik ilyen nevű tábla, a rendszer először törli a táblát. Ha másik sémát vagy táblát szeretne használni, módosítsa a hívásokat az , temps.write.saveAsTablevagy mindkettőrespark.sql.
  3. Menti a DataFrame tartalmát a táblába.
  4. Lekérdezést SELECT futtat a tábla tartalmán.
  5. Megjeleníti a lekérdezés eredményét.
  6. Törli a táblát.

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

Scala

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import java.sql.Date

object Demo {
  def main(args: Array[String]) {
      val spark = SparkSession.builder.master("local").getOrCreate()

      // Create a Spark DataFrame consisting of high and low temperatures
      // by airport code and date.
      val schema = StructType(Array(
        StructField("AirportCode", StringType, false),
        StructField("Date", DateType, false),
        StructField("TempHighF", IntegerType, false),
        StructField("TempLowF", IntegerType, false)
      ))

      val data = List(
        Row("BLI", Date.valueOf("2021-04-03"), 52, 43),
        Row("BLI", Date.valueOf("2021-04-02"), 50, 38),
        Row("BLI", Date.valueOf("2021-04-01"), 52, 41),
        Row("PDX", Date.valueOf("2021-04-03"), 64, 45),
        Row("PDX", Date.valueOf("2021-04-02"), 61, 41),
        Row("PDX", Date.valueOf("2021-04-01"), 66, 39),
        Row("SEA", Date.valueOf("2021-04-03"), 57, 43),
        Row("SEA", Date.valueOf("2021-04-02"), 54, 39),
        Row("SEA", Date.valueOf("2021-04-01"), 56, 41)
      )

      val rdd = spark.sparkContext.makeRDD(data)
      val temps = spark.createDataFrame(rdd, 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.
      val 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")
  }
}

Java

import java.util.ArrayList;
import java.util.List;
import java.sql.Date;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.*;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.Dataset;

public class App {
    public static void main(String[] args) throws Exception {
        SparkSession spark = SparkSession
            .builder()
            .appName("Temps Demo")
            .config("spark.master", "local")
            .getOrCreate();

        // Create a Spark DataFrame consisting of high and low temperatures
        // by airport code and date.
        StructType schema = new StructType(new StructField[] {
            new StructField("AirportCode", DataTypes.StringType, false, Metadata.empty()),
            new StructField("Date", DataTypes.DateType, false, Metadata.empty()),
            new StructField("TempHighF", DataTypes.IntegerType, false, Metadata.empty()),
            new StructField("TempLowF", DataTypes.IntegerType, false, Metadata.empty()),
        });

        List<Row> dataList = new ArrayList<Row>();
        dataList.add(RowFactory.create("BLI", Date.valueOf("2021-04-03"), 52, 43));
        dataList.add(RowFactory.create("BLI", Date.valueOf("2021-04-02"), 50, 38));
        dataList.add(RowFactory.create("BLI", Date.valueOf("2021-04-01"), 52, 41));
        dataList.add(RowFactory.create("PDX", Date.valueOf("2021-04-03"), 64, 45));
        dataList.add(RowFactory.create("PDX", Date.valueOf("2021-04-02"), 61, 41));
        dataList.add(RowFactory.create("PDX", Date.valueOf("2021-04-01"), 66, 39));
        dataList.add(RowFactory.create("SEA", Date.valueOf("2021-04-03"), 57, 43));
        dataList.add(RowFactory.create("SEA", Date.valueOf("2021-04-02"), 54, 39));
        dataList.add(RowFactory.create("SEA", Date.valueOf("2021-04-01"), 56, 41));

        Dataset<Row> temps = spark.createDataFrame(dataList, 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.
        Dataset<Row> 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");
    }
}

Függőségek együttműködése

A főosztály vagy a Python-fájl általában más függőségi JAR-kkel és fájlokkal rendelkezik. Ilyen függőségi JAR-eket és fájlokat sparkContext.addJar("path-to-the-jar") hívhat vagy sparkContext.addPyFile("path-to-the-file")adhat hozzá. Tojásfájlokat és zip-fájlokat is hozzáadhat a addPyFile() felülettel. Minden alkalommal, amikor a kódot az IDE-ben futtatja, a függőségi JAR-ek és fájlok telepítve lesznek a fürtön.

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

Python + Java UDF-ek

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

Scala

package com.example

import org.apache.spark.sql.SparkSession

case class Foo(x: String)

object Test {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      ...
      .getOrCreate();
    spark.sparkContext.setLogLevel("INFO")

    println("Running simple show query...")
    spark.read.format("parquet").load("/tmp/x").show()

    println("Running simple UDF query...")
    spark.sparkContext.addJar("./target/scala-2.11/hello-world_2.11-1.0.jar")
    spark.udf.register("f", (x: Int) => x + 1)
    spark.range(10).selectExpr("f(id)").show()

    println("Running custom objects query...")
    val objs = spark.sparkContext.parallelize(Seq(Foo("bye"), Foo("hi"))).collect()
    println(objs.toSeq)
  }
}

Databricks-segédprogramok elérése

Ez a szakasz bemutatja, hogyan használható a Databricks Csatlakozás a Databricks Utilities eléréséhez.

Használhatja és dbutils.secrets használhatja dbutils.fs a Databricks Utilities (dbutils) referenciamodulját. A támogatott parancsok a következőkdbutils.fs.cp: , dbutils.fs.head, dbutils.fs.ls, dbutils.fs.mkdirs, dbutils.fs.mv, . dbutils.secrets.listdbutils.secrets.listScopesdbutils.fs.putdbutils.fs.rmdbutils.secrets.getdbutils.secrets.getBytes Lásd: Fájlrendszer segédprogram (dbutils.fs) vagy run dbutils.fs.help() and Secrets segédprogram (dbutils.secrets) vagy run 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())

Ha a Databricks Runtime 7.3 LTS vagy újabb verzióját használja, a DBUtils modul helyileg és Azure Databricks-fürtökben is használható módon való eléréséhez használja a következőket get_dbutils():

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

Ellenkező esetben használja a következőt get_dbutils():

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

Scala

val dbutils = com.databricks.service.DBUtils
println(dbutils.fs.ls("dbfs:/"))
println(dbutils.secrets.listScopes())

Fájlok másolása helyi és távoli fájlrendszerek között

Fájlokat dbutils.fs másolhat az ügyfél és a távoli fájlrendszerek között. A séma file:/ az ügyfél helyi fájlrendszerére hivatkozik.

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/')

Az így átvitt fájlméret maximális mérete 250 MB.

Engedélyezze a következőt: dbutils.secrets.get

A biztonsági korlátozások miatt a hívás dbutils.secrets.get lehetősége alapértelmezés szerint le van tiltva. A funkció munkaterülethez való engedélyezéséhez lépjen kapcsolatba az Azure Databricks ügyfélszolgálatával.

Hadoop-konfigurációk beállítása

Az ügyfélen a Hadoop-konfigurációkat az spark.conf.set API használatával állíthatja be, amely az SQL- és DataFrame-műveletekre vonatkozik. A hadoop-konfigurációkat a sparkContext fürtkonfigurációban vagy egy jegyzetfüzetben kell beállítani. Ennek az az oka, hogy a beállított sparkContext konfigurációk nem kapcsolódnak a felhasználói munkamenetekhez, hanem a teljes fürtre vonatkoznak.

Hibaelhárítás

Futtassa databricks-connect test a csatlakozási problémák kereséséhez. Ez a szakasz a Databricks Csatlakozás és azok megoldásának néhány gyakori problémáját ismerteti.

Ebben a szakaszban:

Python-verzióeltérés

Ellenőrizze, hogy a helyileg használt Python-verzió legalább ugyanazzal az alverzióval rendelkezik-e, 3.9.16 mint a fürt verziója (például a versus 3.9.15 értéke OK, 3.9 szemben 3.8 a nem).

Ha több Python-verzió van telepítve helyileg, győződjön meg arról, hogy a Databricks Csatlakozás a megfelelőt használja a PYSPARK_PYTHON környezeti változó beállításával (példáulPYSPARK_PYTHON=python3).

A kiszolgáló nincs engedélyezve

Győződjön meg arról, hogy a fürtben engedélyezve spark.databricks.service.server.enabled truevan a Spark-kiszolgáló. Ha igen, az illesztőprogram-naplóban a következő sorokat kell látnia:

../../.. ..:..:.. 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

Ütköző PySpark-telepítések

A databricks-connect csomag ütközik a PySparkkal. Ha mindkettő telepítve van, az hibát fog okozni a Spark-környezet Pythonban való inicializálása során. Ez többféleképpen is nyilvánulhat meg, beleértve a "sérült stream" vagy a "nem található osztály" hibákat. Ha a PySpark telepítve van a Python-környezetben, a databricks-connect telepítése előtt győződjön meg arról, hogy el lett távolítva. A PySpark eltávolítása után mindenképpen telepítse újra a Databricks Csatlakozás csomagot:

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

Ütköző SPARK_HOME

Ha korábban már használta a Sparkot a számítógépén, előfordulhat, hogy az IDE úgy van konfigurálva, hogy a Databricks Csatlakozás Spark helyett a Spark egyik másik verzióját használja. Ez többféleképpen is nyilvánulhat meg, beleértve a "sérült stream" vagy a "nem található osztály" hibákat. A környezeti változó értékének SPARK_HOME ellenőrzésével láthatja, hogy a Spark melyik verzióját használja:

Python

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

Scala

println(sys.env.get("SPARK_HOME"))

Java

System.out.println(System.getenv("SPARK_HOME"));

Resolution (Osztás)

Ha SPARK_HOME a Spark egy olyan verziójára van beállítva, amely nem az ügyfél egyik verziója, akkor törölje a SPARK_HOME változót, és próbálkozzon újra.

Ellenőrizze az IDE környezeti változó beállításait, a .bashrcsaját , .zshrcvagy .bash_profile a fájl, és bárhol máshol, ahol a környezeti változók be lesznek állítva. A régi állapot törléséhez valószínűleg ki kell lépnie és újra kell indítania az IDE-t, és akár új projektet is létre kell hoznia, ha a probléma továbbra is fennáll.

Nem kell új értéket beállítania SPARK_HOME ; a beállításnak elegendőnek kell lennie.

Ütköző vagy hiányzó PATH bejegyzés bináris fájlokhoz

Lehetséges, hogy a PATH úgy van konfigurálva, hogy az olyan parancsok, mint spark-shell a Databricks Csatlakozás megadott helyett más, korábban telepített bináris fájl futjon. Ez meghiúsulást okozhat databricks-connect test . Győződjön meg arról, hogy a Databricks Csatlakozás bináris fájlok elsőbbséget élveznek, vagy eltávolítják a korábban telepített fájlokat.

Ha nem tud például spark-shellparancsokat futtatni, az is lehetséges, hogy a PATH nem lett automatikusan beállítva pip3 install , és manuálisan kell hozzáadnia a telepítési bin dirt a PATH-hoz. A Databricks Csatlakozás akkor is használható azonosítókkal, ha nincs beállítva. A databricks-connect test parancs azonban nem fog működni.

Ütköző szerializálási beállítások a fürtön

Ha a futtatáskor databricks-connect test"sérült stream" hibaüzenet jelenik meg, ez a fürt szerializálásának nem kompatibilis konfigurációi miatt lehet. A konfiguráció beállítása spark.io.compression.codec például okozhatja ezt a problémát. A probléma megoldásához érdemes lehet eltávolítani ezeket a konfigurációkat a fürtbeállításokból, vagy beállítani a konfigurációt a Databricks Csatlakozás-ügyfélben.

Nem található winutils.exe a Windows

Ha a Databricks Csatlakozás használja Windows rendszeren, és tekintse meg a következőt:

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.

Kövesse az utasításokat a Hadoop elérési út Windows rendszeren való konfigurálásához.

A fájlnév, a könyvtárnév vagy a kötetcímke szintaxisa helytelen a Windowsban

Ha Windows és Databricks Csatlakozás használ, tekintse meg a következőt:

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

A Java vagy a Databricks Csatlakozás egy olyan könyvtárba lett telepítve, amelyben szóköz van az elérési úton. Ezt úgy teheti meg, hogy szóközök nélkül telepíti a címtár elérési útját, vagy konfigurálja az elérési utat a rövid névűrlap használatával.

Hitelesítés Microsoft Entra-azonosító jogkivonatokkal

Feljegyzés

A következő információk csak a Databricks Csatlakozás 7.3.5–12.2.x verzióra vonatkoznak.

A Databricks Runtime 13.0-s és újabb verzióhoz készült Databricks Csatlakozás jelenleg nem támogatja a Microsoft Entra ID-jogkivonatokat.

A Databricks Csatlakozás 7.3.5 és 12.2.x verziók használata esetén személyes hozzáférési jogkivonat helyett Microsoft Entra ID-jogkivonattal hitelesíthet. A Microsoft Entra ID-jogkivonatok élettartama korlátozott. Amikor a Microsoft Entra ID-jogkivonat lejár, a Databricks Csatlakozás hibaüzenettel Invalid Token meghiúsul.

A Databricks Csatlakozás 7.3.5 és 12.2.x verziók esetén a Microsoft Entra ID tokent a futó Databricks Csatlakozás alkalmazásban is megadhatja. Az alkalmazásnak be kell szereznie az új hozzáférési jogkivonatot, és be kell állítania az spark.databricks.service.token SQL konfigurációs kulcsára.

Python

spark.conf.set("spark.databricks.service.token", new_aad_token)

Scala

spark.conf.set("spark.databricks.service.token", newAADToken)

A jogkivonat frissítése után az alkalmazás továbbra is használhatja a SparkSession munkamenet kontextusában létrehozott objektumokat és állapotokat. Az időszakos hibák elkerülése érdekében a Databricks azt javasolja, hogy adjon meg egy új jogkivonatot a régi jogkivonat lejárata előtt.

A Microsoft Entra ID-jogkivonat élettartamát meghosszabbíthatja, hogy az alkalmazás végrehajtása során is megmaradjon. Ehhez csatoljon egy TokenLifetimePolicy-t megfelelő hosszú élettartammal a hozzáférési jogkivonat beszerzéséhez használt Microsoft Entra-azonosító engedélyezési alkalmazáshoz.

Feljegyzés

A Microsoft Entra ID átengedése két jogkivonatot használ: a Korábban ismertetett Microsoft Entra ID hozzáférési jogkivonatot, amelyet a Databricksben konfigurált Csatlakozás 7.3.5-12.2.x verzióban, valamint az ADLS átengedési jogkivonatot az adott erőforráshoz, amelyet a Databricks generál, miközben a Databricks feldolgozza a kérést. Az ADLS-átengedési jogkivonatok élettartamát nem hosszabbíthatja meg a Microsoft Entra ID-jogkivonatok élettartam-szabályzatainak használatával. Ha egy óránál hosszabb ideig tartó parancsot küld a fürtnek, az sikertelen lesz, ha a parancs az egyórás megjelölés után hozzáfér egy ADLS-erőforráshoz.

Korlátozások

  • Unity Katalógus.

  • Strukturált streamelés.

  • Tetszőleges kód futtatása, amely nem része a Spark-feladatnak a távoli fürtön.

  • A Delta-táblaműveletek natív Scala-, Python- és R API-k (például DeltaTable.forPath) nem támogatottak. A Delta Lake-műveletekkel rendelkező SQL API (spark.sql(...)) és a Spark API (például spark.read.load) egyaránt támogatott a Delta-táblákon.

  • Másolás a fájlba.

  • SQL-függvények, Python- vagy Scala-UDF-ek használata, amelyek a kiszolgáló katalógusának részét képezik. A helyileg bevezetett Scala és Python UDF-ek azonban működnek.

  • Apache Zeppelin 0.7.x és újabb.

  • Csatlakozás táblahozzáférés-vezérléssel rendelkező fürtökre.

  • Csatlakozás olyan fürtökre, amelyeken engedélyezve van a folyamatelkülönítés (más szóval, hogy hol spark.databricks.pyspark.enableProcessIsolation van beállítvatrue).

  • Delta CLONE SQL-parancs.

  • Globális ideiglenes nézetek.

  • Koalas és pyspark.pandas.

  • CREATE TABLE table AS SELECT ... Az SQL-parancsok nem mindig működnek. Ehelyett használja a következőt spark.sql("SELECT ...").write.saveAsTable("table"): .

  • A Microsoft Entra ID hitelesítőadat-átengedés csak a Databricks Runtime 7.3 LTS-t és újabb verziót futtató standard fürtökön támogatott, és nem kompatibilis a szolgáltatásnév-hitelesítéssel.

  • A következő Databricks Utilities (dbutils) referencia: