Databricks-vezérlők
A bemeneti vezérlők lehetővé teszik paraméterek hozzáadását a jegyzetfüzetekhez és irányítópultokhoz. Hozzáadhat egy widgetet a Databricks felhasználói felületéről vagy a widget API használatával. Widget hozzáadásához vagy szerkesztéséhez SZERKESZTÉSi engedélyekkel kell rendelkeznie a jegyzetfüzeten.
Ha Databricks Runtime 11.3 LTS-t vagy újabb verziót futtat, ipywidgeteket is használhat a Databricks-jegyzetfüzetekben.
A Databricks widgetek a legjobbak a következőkhöz:
- Olyan jegyzetfüzet vagy irányítópult létrehozása, amelyet más paraméterekkel újra végrehajtanak.
- Egy különböző paraméterekkel rendelkező lekérdezés eredményeinek gyors feltárása.
A Widget API scalai, Python- vagy R-dokumentációjának megtekintéséhez használja a következő parancsot: dbutils.widgets.help()
Databricks-vezérlőtípusok
A widgeteknek 4 típusa van:
text
: Adjon meg egy értéket egy szövegmezőben.dropdown
: Válasszon ki egy értéket a megadott értékek listájából.combobox
: Szöveg és legördülő lista kombinációja. Válasszon ki egy értéket egy megadott listából, vagy adjon meg egyet a szövegmezőben.multiselect
: Válasszon ki egy vagy több értéket a megadott értékek listájából.
A widgetek legördülő listája és a szövegmezők közvetlenül a jegyzetfüzet eszköztárát követve jelennek meg. A widgetek csak sztringértékeket fogadnak el.
Widget létrehozása a felhasználói felületen
Widget létrehozásához válassza az Edit Add widget (Vezérlő hozzáadása) lehetőséget>. A Widget hozzáadása párbeszédpanelen adja meg a widget nevét, az opcionális címkét, a típust, a paraméter típusát, a lehetséges értékeket és az opcionális alapértelmezett értéket. A párbeszédpanelen a paraméternév az a név, amelyet a kódban lévő widgetre való hivatkozáshoz használ. A widgetcímke egy opcionális név, amely a felhasználói felületen található widgeten keresztül jelenik meg.
Miután létrehozott egy widgetet, rámutathat a widget nevére, és megjeleníthet egy eszköztippet, amely leírja, hogyan hivatkozhat a widgetre.
A kebab menüben szerkesztheti vagy eltávolíthatja a widgetet:
Databricks-widgetek használata számítási fürtön
Ez a szakasz azt ismerteti, hogyan használhatók a Databricks-vezérlők egy számítási fürthöz csatolt jegyzetfüzetben. Ha widgeteket szeretne használni egy SQL-raktárhoz csatolt jegyzetfüzetben, olvassa el a Databricks-vezérlők használata SQL-raktáron című témakört.
Databricks widget API (fürt)
A widget API úgy lett kialakítva, hogy konzisztens legyen a Scalában, a Pythonban és az R-ben. Az SQL widget API-ja kissé eltérő, de egyenértékű a többi nyelvvel. A widgeteket a Databricks Utilities (dbutils) referencia-felületén keresztül kezelheti.
- Az összes widgettípus első argumentuma a
name
. Ezt a nevet használja a widget eléréséhez. - A második argumentum a
defaultValue
widget alapértelmezett beállítása. - A harmadik argumentum az összes widgettípusra érvényes, kivéve
text
azokatchoices
az értékeket, amelyek a widget által alkalmazhatók. Ez az argumentum nem használható típustext
widgetekhez. - Az utolsó argumentum a
label
widget szövegmezőjén vagy legördülő listájában megjelenő címke opcionális értéke.
Példa a Databricks widgetre (fürt)
Az egyes metódusok részletes API-dokumentációjának megtekintéséhez használja dbutils.widgets.help("<method-name>")
a következőt: . A súgó API minden nyelven azonos. Példa:
dbutils.widgets.help("dropdown")
Hozzon létre egy egyszerű legördülő vezérlőt.
Python
dbutils.widgets.dropdown("state", "CA", ["CA", "IL", "MI", "NY", "OR", "VA"])
SQL
CREATE WIDGET DROPDOWN state DEFAULT "CA" CHOICES SELECT * FROM (VALUES ("CA"), ("IL"), ("MI"), ("NY"), ("OR"), ("VA"))
A widget panelen található widget használata.
A widget aktuális értékét a hívással érheti el:
Python
dbutils.widgets.get("state")
SQL
SELECT "${state}"
Végül eltávolíthat egy widgetet vagy az összes widgetet a jegyzetfüzetből:
Python
dbutils.widgets.remove("state")
dbutils.widgets.removeAll()
SQL
REMOVE WIDGET state
Ha eltávolít egy widgetet, nem hozhat létre widgetet ugyanabban a cellában. A widgetet egy másik cellában kell létrehoznia.
Widgetértékek használata a Spark SQL-ben (fürt)
A Spark SQL a lekérdezésekben használható sztringkonstansokként fér hozzá a widgetértékekhez.
A Spark SQL-ből bármilyen nyelven definiált widgetekhez hozzáférhet, miközben interaktívan hajtja végre a jegyzetfüzeteket. Fontolja meg a következő munkafolyamatot:
Hozzon létre egy legördülő vezérlőt az aktuális katalógus összes adatbázisából:
dbutils.widgets.dropdown("database", "default", [database[0] for database in spark.catalog.listDatabases()])
Hozzon létre egy szöveg widgetet a táblanév manuális megadásához:
dbutils.widgets.text("table", "")
Sql-lekérdezés futtatása az adatbázis összes táblájának megtekintéséhez (a legördülő listából kiválasztva):
SHOW TABLES IN ${database}
Adja meg manuálisan a táblázat nevét a
table
widgetbe.A tábla tartalmának előnézete a lekérdezés tartalmának szerkesztése nélkül:
SELECT * FROM ${database}.${table} LIMIT 100
Feljegyzés
Általában nem használhat widgeteket, hogy argumentumokat adjanak át a jegyzetfüzet különböző nyelvei között. Létrehozhat egy widgetet arg1
egy Python-cellában, és használhatja egy SQL- vagy Scala-cellában, ha egyszerre egy cellát futtat. Ez azonban nem működik, ha az Összes futtatása vagy a jegyzetfüzet futtatása feladatként fut.
Áthidaló megoldások:
- Az olyan jegyzetfüzetek esetében, amelyek nem keverik a nyelveket, létrehozhat egy jegyzetfüzetet az egyes nyelvekhez, és a jegyzetfüzet futtatásakor átadhatja az argumentumokat.
- A widgetet hívással
spark.sql()
érheti el. Például a Pythonban:spark.sql("select getArgument('arg1')").take(1)[0][0]
.
- A widgetet hívással
Feljegyzés
Ha el szeretné menekülni a $
karaktert egy SQL-sztring literáljában, használja a következőt \$
: . Például a sztring $1,000
kifejezéséhez használja a következőt "\$1,000"
: Az $
SQL-azonosítókhoz nem lehet megmenekülni.
Databricks-widgetek használata SQL-raktárban
Ez a szakasz azt ismerteti, hogyan használhatók a Databricks-vezérlők egy SQL-raktárhoz csatolt jegyzetfüzetben. Ha egy számítási fürthöz csatolt jegyzetfüzetben szeretne widgeteket használni, olvassa el a Databricks-vezérlők használata számítási fürtön című témakört.
Ha egy SQL-raktárban lévő widgetértékekre szeretne hivatkozni, használja a szintaxist, nem $param
pedig a .:param
Ha például egy fare_amount nevű widgettel rendelkezik, használja a következőhöz hasonló kódot:
SELECT * FROM samples.nyctaxi.trips WHERE fare_amount < :fare_amount
A kulcsszóval IDENTIFIER
azonosíthat objektumokat, például táblákat, nézeteket, sémákat és oszlopokat. Ha például a table_name nevű widget a következőre samples.nyctaxi.trips
van állítva:
SELECT * FROM IDENTIFIER(:table_name)
További részletekért lásd az IDENTIFIER záradékot.
A paraméterjelölő szintaxisával kapcsolatos részletekért tekintse meg a Paraméterjelölőket.
Vezérlőbeállítások konfigurálása
Konfigurálhatja a widgetek viselkedését egy új érték kiválasztásakor, hogy a widgetpanel mindig a jegyzetfüzet tetejére van-e rögzítve, és módosíthatja a widgetek elrendezését a jegyzetfüzetben.
Kattintson a Widget panel jobb végén található ikonra.
Az előugró widgetpanel Gépház párbeszédpanelen válassza ki a widget végrehajtási viselkedését.
- Jegyzetfüzet futtatása: Minden alkalommal, amikor új érték van kiválasztva, a teljes jegyzetfüzet újrafut.
- Hozzáféréssel rendelkező parancsok futtatása: Minden alkalommal, amikor új érték van kijelölve, csak az adott widget értékeit lekérő cellák lesznek újrafuttatva. Ez az alapértelmezett beállítás widget létrehozásakor. Ebben a konfigurációban az SQL-cellák nem futnak újra.
- Do Nothing: Minden alkalommal, amikor új érték van kijelölve, semmi sem fut újra.
Ha a widgeteket a jegyzetfüzet tetejére szeretné kitűzni, vagy az első cella fölé szeretné helyezni a widgeteket, kattintson a gombra. A beállítás mentése felhasználónként történik. Kattintson ismét a hüvelykujj ikonra az alapértelmezett viselkedés visszaállításához.
Ha rendelkezik a JEGYZETFÜZETEK KEZELÉSE engedéllyel, a widget elrendezését a gombra kattintva konfigurálhatja. Az egyes vezérlők sorrendje és mérete testre szabható. A módosítások mentéséhez vagy elvetéséhez kattintson a gombra .
A widget elrendezése a jegyzetfüzettel együtt lesz mentve. Ha az alapértelmezett konfigurációról módosítja a widgetelrendezést, a rendszer nem ad hozzá új widgeteket betűrendben.
Ha alaphelyzetbe szeretné állítani a widgetelrendezést egy alapértelmezett sorrendre és méretre, kattintson a Widget panel Gépház párbeszédpanel megnyitásához, majd az Elrendezés visszaállítása parancsra. A
removeAll()
parancs nem állítja vissza a widget elrendezését.
Példajegyzetfüzet
Az alábbi jegyzetfüzetben megtekintheti a hozzáféréssel rendelkező parancsok futtatása beállítás működését bemutató bemutatót. A year
widget a beállítással 2014
jön létre, és a DataFrame API-ban és az SQL-parancsokban használatos.
Amikor módosítja a year
widget 2007
beállításait, a DataFrame parancs újrafut, de az SQL-parancs nem fut újra.
Ez a jegyzetfüzet a fürthöz csatolt jegyzetfüzetek widgeteinek használatát mutatja be, nem sql-raktárban.
Widget bemutató jegyzetfüzete
Databricks-widgetek az irányítópultokon
Amikor olyan jegyzetfüzetből hoz létre irányítópultot, amely bemeneti widgetekkel rendelkezik, az összes widget megjelenik az irányítópult tetején. Bemutató módban minden alkalommal, amikor frissít egy widget értékét, a Frissítés gombra kattintva újra futtathatja a jegyzetfüzetet, és új értékekkel frissítheti az irányítópultot.
Databricks-vezérlők használata a következővel: %run
Ha widgeteket tartalmazó jegyzetfüzetet futtat, a rendszer a megadott jegyzetfüzetet a widget alapértelmezett értékeivel futtatja.
Ha a jegyzetfüzet egy fürthöz van csatolva (vagyis nem SQL-raktárhoz), az értékeket a widgeteknek is átadhatja. Példa:
%run /path/to/notebook $X="10" $Y="1"
Ez a példa a megadott jegyzetfüzetet futtatja, és átadja 10
az X vezérlőnek és 1
az Y vezérlőnek.
Korlátozások
A vezérlőkre a következő korlátozások vonatkoznak:
- Legfeljebb 512 widget hozható létre egy jegyzetfüzetben.
- A widget neve legfeljebb 1024 karakter hosszúságú lehet.
- A widgetcímke legfeljebb 2048 karakter hosszúságú lehet.
- Szöveg widgetbe legfeljebb 2048 karakter adható meg.
- Többválasztós, kombinált lista vagy legördülő vezérlő esetén legfeljebb 1024 választási lehetőség közül választhat.
Van egy ismert probléma, amely miatt előfordulhat, hogy a vezérlő állapota a Futtatás az összes billentyű lenyomása után sem teljesen egyértelmű, még akkor sem, ha törli vagy eltávolítja a vezérlőt a kódból. Ha ez történik, a widget vizualizációs állapota és nyomtatott állapota között eltérés jelenik meg. A cellák egyenként történő újrafuttatása megkerülheti ezt a problémát. A probléma teljes elkerülése érdekében a Databricks az ipywidgets használatát javasolja.
Nem szabad közvetlenül aszinkron környezetekben, például szálakban, alfolyamatokban vagy strukturált streamelésben (foreachBatch) hozzáférni a widget állapotához, mivel a widget állapota megváltozhat az aszinkron kód futtatása közben. Ha aszinkron környezetben kell hozzáférnie a widget állapotához, adja meg argumentumként. Ha például a következő kóddal rendelkezik, amely szálakat használ:
import threading def thread_func(): # Unsafe access in a thread value = dbutils.widgets.get('my_widget') print(value) thread = threading.Thread(target=thread_func) thread.start() thread.join()
Ezután a következő módon kell írnia:
# Access widget values outside the asynchronous context and pass them to the function value = dbutils.widgets.get('my_widget') def thread_func(val): # Use the passed value safely inside the thread print(val) thread = threading.Thread(target=thread_func, args=(value,)) thread.start() thread.join()