Bekannte Einschränkungen von Databricks-Notebooks
In diesem Artikel werden bekannte Einschränkungen von Databricks-Notebooks erläutert. Weitere Ressourceneinschränkungen finden Sie unter Ressourceneinschränkungen.
Dimensionierung von Notebooks
- Einzelne Notebook-Zellen haben einen Eingabegrenzwert von 6 MB.
- Die maximale Größe des Notebooks für die automatische Speicherung, den Import, Export und Klonvorgang für Revisionsmomentaufnahmen beträgt 10 MB.
- Sie können Notebooks mit bis zu 32 MB manuell speichern.
Tabelle mit Notebook-Ergebnissen
- Tabellenergebnisse sind auf 10.000 Zeilen oder 2 MB beschränkt, je nachdem, welcher Wert niedriger ist.
- Auftragscluster verfügen über eine maximale Notebook-Ausgabegröße von 30 MB.
- Nicht tabellarische Befehlsergebnisse haben einen Grenzwert von 20 MB.
- Standardmäßig geben Textergebnisse maximal 50.000 Zeichen zurück. Mit Databricks Runtime 12.2 LTS und höher können Sie diesen Grenzwert erhöhen, indem Sie die Spark-Konfigurationseigenschaft
spark.databricks.driver.maxReplOutputLength
festlegen.
Notebook-Debugger
Einschränkungen des Notebook-Debuggers:
- Der Debugger funktioniert nur mit Python. Es unterstützt weder Scala noch R.
- Der Debugger funktioniert nicht auf Clustern im Modus Gemeinsamer Zugriff.
- Der Debugger unterstützt das schrittweise Ausführen in externen Dateien oder Modulen nicht.
- Wenn eine Debugsitzung aktiv ist, können Sie keine anderen Befehle im Notebook ausführen.
SQL-Warehouse-Notebooks
Zu den Einschränkungen von SQL-Warehouse-Notebooks gehören:
- Wenn sie an ein SQL-Warehouse angefügt werden, weisen Ausführungskontexte ein Leerlauftimeout von 8 Stunden auf.
ipywidgets
Einschränkungen von ipywidgets:
- Ein Notebook mit ipywidgets muss an einen ausgeführten Cluster angefügt werden.
- Widgetzustände werden nicht über Notebooksitzungen hinaus beibehalten. Wenn das Notebook an einen Cluster angefügt wird, müssen Widgetzellen immer erneut ausgeführt werden, um sie zu rendern.
- Die ipywidgets für Kennwort und Controller werden nicht unterstützt.
- HTMLMath- und Label-Widgets mit LaTeX-Ausdrücken werden nicht ordnungsgemäß gerendert. (Beispiel:
widgets.Label(value=r'$$\frac{x+1}{x-1}$$')
wird nicht ordnungsgemäß gerendert.) - Widgets werden möglicherweise nicht richtig gerendert, wenn sich das Notebook im dunklen Modus befindet. Das gilt insbesondere für farbige Widgets.
- Widgetausgaben können nicht in Notebookdashboardansichten verwendet werden.
- Die maximale Nachrichtenpayloadgröße für ein ipywidget beträgt 5 MB. Widgets mit Bildern oder umfangreichen Textdaten werden möglicherweise nicht ordnungsgemäß gerendert.
Databricks-Widgets
Einschränkungen von Databricks-Widgets:
In einem Notebook können maximal 512 Widgets erstellt werden.
Ein Widgetname ist auf 1024 Zeichen beschränkt.
Eine Widgetbezeichnung ist auf 2048 Zeichen beschränkt.
Maximal 2048 Zeichen können in ein Text-Widget eingegeben werden.
Es kann maximal 1024 Auswahlmöglichkeiten für ein Mehrfachauswahl-, Kombinationsfeld- oder Dropdown-Widget geben.
Es gibt ein bekanntes Problem, bei dem ein Widgetstatus nach dem Drücken von Alle ausführen möglicherweise nicht ordnungsgemäß gelöscht wird, auch wenn das Widget im Code gelöscht oder entfernt wurde. In diesem Fall unterscheiden sich der visuelle Zustand des Widgets und sein gedruckter Zustand. Durch das erneute Ausführen der einzelnen Zellen kann dieses Problem umgangen werden. Um dieses Problem vollständig zu vermeiden, empfiehlt Databricks die Verwendung von ipywidgets.
Sie sollten nicht direkt auf den Widgetstatus in asynchronen Kontexten wie Threads, Unterprozessen oder Structured Streaming (foreachBatch) zugreifen, da sich der Widget-Status ändern kann, während der asynchrone Code läuft. Wenn Sie in einem asynchronen Kontext auf den Widgetzustand zugreifen müssen, übergeben Sie ihn als Argument. Angenommen, Sie haben den folgenden Code, der Threads verwendet:
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()
Databricks empfiehlt stattdessen die Verwendung eines Arguments:
# 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()
Im Allgemeinen können Widgets keine Argumente zwischen verschiedenen Sprachen innerhalb eines Notebooks übergeben. Sie können
arg1
für ein Widget in einer Python-Zelle erstellen und in einer SQL- oder Scala-Zelle verwenden, wenn Sie eine Zelle nach der anderen ausführen. Dies funktioniert jedoch nicht, wenn Sie Alle ausführen verwenden oder das Notebook als Auftrag ausführen. Einige Problemumgehungen sind:- Für Notebooks, für die keine Sprachen kombiniert werden können, können Sie ein Notebook für jede Sprache erstellen und die Argumente übergeben, wenn Sie das Notebook ausführen.
- Sie können über einen
spark.sql()
-Anruf auf das Widget zugreifen. Beispiel für Python:spark.sql("select getArgument('arg1')").take(1)[0][0]
.
Bamboolib
Einschränkungen von bamboolib:
- Die Verwendung von bamboolib für Data Wrangling ist auf ca. 10 Millionen Zeilen beschränkt. Dieser Grenzwert hängt von Pandas und den Computeressourcen Ihres Clusters ab.
- Die Verwendung von bamboolib für Datenvisualisierungen ist auf etwa 10.000 Zeilen beschränkt. Dieser Grenzwert basiert auf Plotly.