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 pyspark
require(SparkR)
Spark-feladatokat közvetlenül az alkalmazásból anélkül, hogy ide beépülő modulokat kellene telepítenie, vagyimport org.apache.spark
Spark-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 avenv
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
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 adatabricks-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 ashow
parancsot.# Is PySpark already installed? pip3 show pyspark # Uninstall PySpark pip3 uninstall pyspark
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
Gyűjtse össze a következő konfigurációs tulajdonságokat.
Az Azure Databricks munkaterületenkénti URL-címe. Ez megegyezik
https://
a fürt kiszolgálói állomásnév értékével is; lásd az Azure Databricks számítási erőforrás kapcsolati adatainak lekérése című témakört.Az Azure Databricks személyes hozzáférési jogkivonata vagy a Microsoft Entra ID (korábbi nevén Azure Active Directory) jogkivonata.
- Az Azure Data Lake Storage (ADLS) hitelesítő adatok átengedéséhez Microsoft Entra-azonosítót (korábbi nevén Azure Active Directory) kell használnia. 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 Microsoft Entra ID-jogkivonatokkal való hitelesítésről további információt a Microsoft Entra ID-jogkivonatok használatával történő hitelesítés című témakörben talál.
A fürt azonosítója. A fürtazonosítót az URL-címről szerezheti be. Itt a fürt azonosítója.
1108-201635-xxxxxxxx
Lásd még a fürt URL-címét és azonosítóját.A munkaterület egyedi szervezeti azonosítója. Lásd: Munkaterület-objektumok azonosítóinak lekérése.
Az a port, amelyhez a Databricks Csatlakozás csatlakozik a fürtön. Az alapértelmezett port a következő
15001
: . Ha a fürt úgy van konfigurálva, hogy egy másik portot használjon, például8787
az Azure Databricksre vonatkozó korábbi utasításokban, használja a konfigurált portszámot.
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
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 ...
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
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
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
- Klasszikus Jupyter Notebook
- PyCharm
- SparkR és RStudio Desktop
- sparklyr és RStudio Desktop
- IntelliJ (Scala vagy Java)
- PyDev és Eclipse
- Eclipse
- SBT
- Spark-rendszerhéj
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.
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
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
VAGY127.0.0.1
onnan származó URL-címet, és írja be a webböngésző címsorába.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.
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.A jegyzetfüzet futtatásához kattintson az Összes cella futtatása parancsra>.
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>.
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 bey
.
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:
Ellenőrizze, hogy telepítve van-e a Python-bővítmény .
Nyissa meg a parancskatalógust (Command+Shift+P macOS rendszeren és Ctrl+Shift+P Windows/Linux rendszeren).
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.
Futtassa az
databricks-connect get-jar-dir
parancsot.Adja hozzá a parancsból visszaadott könyvtárat a Felhasználó Gépház JSON-fájlhoz a következő alatt
python.venvPath
: . Ezt hozzá kell adni a Python-konfigurációhoz.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:
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.Ha például a fürt Python 3.9, a fejlesztői környezetnek Python 3.9-nek kell lennie.
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
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).
Nyissa meg a Konfigurációk szerkesztése parancsot>.
Hozzáadás
PYSPARK_PYTHON=python3
környezeti változóként.
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:
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).
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/pyspark
például aSPARK_HOME
könyvtárat.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>")
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 telepítése, konfigurálása és használata
- Erőforrások
- sparklyr és RStudio Desktop korlátozások
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
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")
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
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
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:
Futtassa az
databricks-connect get-jar-dir
parancsot.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.
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
).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.
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.
- Indítsa el az Eclipse-et.
- Projekt létrehozása: kattintson a File > New Project PyDev > PyDev Project(Új > projekt>) gombra, majd a Tovább gombra.
- Adjon meg egy projektnevet.
- A Project tartalmához adja meg a Python virtuális környezet elérési útját.
- A folytatás előtt kattintson a Tolmács konfigurálása gombra.
- Kattintson a Manuális konfiguráció elemre.
- Kattintson a Python/pypy exe új > tallózása parancsra.
- 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.
- A Tolmács kiválasztása párbeszédpanelen kattintson az OK gombra.
- A Kijelöléshez szükséges párbeszédpanelen kattintson az OK gombra.
- A Beállítások párbeszédpanelen kattintson az Alkalmaz és a Bezárás gombra.
- A PyDev Project párbeszédpanelen kattintson a Befejezés gombra.
- Kattintson a Perspektíva megnyitása gombra.
- 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étrehozniaSparkSession.builder.getOrCreate()
a példában látható módon. - 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.
- 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:
Futtassa az
databricks-connect get-jar-dir
parancsot.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.
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
).
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.
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.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 aspark-shell
parancsot.# For Python: pyspark
# For Scala: spark-shell
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>
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 aSparkSession
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
A Spark-rendszerhéj leállításához nyomja le
Ctrl + d
vagyCtrl + z
futtassa a parancsotquit()
, aexit()
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:
- Létrehoz egy memóriabeli DataFrame-et.
- Létrehoz egy táblát a
zzz_demo_temps_table
sémán belüldefault
. 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.saveAsTable
vagy mindkettőrespark.sql
. - Menti a DataFrame tartalmát a táblába.
- Lekérdezést
SELECT
futtat a tábla tartalmán. - Megjeleníti a lekérdezés eredményét.
- 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.list
dbutils.secrets.listScopes
dbutils.fs.put
dbutils.fs.rm
dbutils.secrets.get
dbutils.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
- A kiszolgáló nincs engedélyezve
- Ütköző PySpark-telepítések
- Ütköző
SPARK_HOME
- Ütköző vagy hiányzó
PATH
bejegyzés bináris fájlokhoz - Ütköző szerializálási beállítások a fürtön
- Nem található
winutils.exe
a Windows - A fájlnév, a könyvtárnév vagy a kötetcímke szintaxisa helytelen a Windowsban
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 true
van 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 .bashrc
saját , .zshrc
vagy .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-shell
parancsokat 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
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áulspark.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őtspark.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: