Limitations connues des notebooks Databricks
Cet article couvre les limites connues des notebooks Databricks. Pour plus d’informations sur les limites de ressources, consultez Limites de ressources.
Dimensionnement du notebook
- Les cellules des notebooks individuels ont une limite d’entrée de 6 Mo.
- La taille maximale du notebook pour l’enregistrement automatique, l’importation, l’exportation et le clonage des captures instantanées de révision est de 10 Mo.
- Vous pouvez enregistrer manuellement les notebooks jusqu’à 32 Mo.
Table des résultats du notebook
- Les résultats des tables sont limités à 10 000 lignes ou à 2 Mo, la valeur la plus faible étant retenue.
- Les clusters de travail ont une taille maximale de sortie de notebook de 30 Mo.
- Les résultats des commandes non tabulaires sont limités à 20 Mo.
- Les résultats du texte renvoient par défaut un maximum de 50 000 caractères. Avec Databricks Runtime 12.2 LTS et versions ultérieures, vous pouvez augmenter cette limite en paramétrant la propriété
spark.databricks.driver.maxReplOutputLength
de la configuration Spark.
Débogueur de notebook
Limitations du débogueur de notebook :
- Le débogueur fonctionne uniquement avec Python. Il ne prend pas en charge Scala ou R.
- Le débogueur ne fonctionne pas sur les clusters en mode d’accès partagé.
- Le débogueur ne prend pas en charge les pas à pas détaillés dans des fichiers ou modules externes.
- Vous ne pouvez pas exécuter d’autres commandes dans le notebook lorsqu’une session de débogage est active.
Notebooks SQL Warehouse
Limites des notebooks des entrepôts SQL :
- Lorsqu’ils sont attachés à un entrepôt SQL, les contextes d’exécution ont un délai d’inactivité de 8 heures.
ipywidgets
Limites des ipywidgets :
- Un notebook utilisant des ipywidgets doit être attaché à un cluster en cours d’exécution.
- Les états du widget ne sont pas conservés entre les sessions de notebook. Vous devez réexécuter des cellules de widget pour les afficher chaque fois que vous attachez le notebook à un cluster.
- Les ipywidgets du mot de passe et du contrôleur ne sont pas pris en charge.
- Les widgets HTMLMath et Label avec des expressions LaTeX ne s’affichent pas correctement. (Par exemple,
widgets.Label(value=r'$$\frac{x+1}{x-1}$$')
ne s’affiche pas correctement.) - Si le notebook est en mode sombre, les widgets peuvent ne pas s’afficher correctement, en particulier les widgets colorés.
- Les sorties de widget ne peuvent pas être utilisées dans les affichages du tableau de bord du notebook.
- La taille maximale de la charge utile du message pour un ipywidget est de 5 Mo. Les widgets qui utilisent des images ou des données de texte volumineuses peuvent ne pas être correctement restitués.
Widgets Databricks
Limites des widgets Databricks :
Un maximum de 512 widgets peut être créé dans un bloc-notes.
Le nom d’un widget est limité à 1024 caractères.
Le libellé d’un widget est limité à 2048 caractères.
Un maximum de 2048 caractères peut être entré dans un widget de texte.
Il peut y avoir un maximum de 1024 choix pour un widget de liste déroulante, de sélection multiple ou de zone de liste déroulante.
Il existe un problème connu où l’état d’un widget peut ne pas s’effacer correctement après avoir appuyé sur Exécuter tout, même après avoir effacé ou supprimé le widget dans le code. Si cela se produit, vous verrez une différence entre l’état visuel du widget et l’état imprimé. Ré-exécuter les cellules individuellement peut permettre de contourner ce problème. Pour éviter entièrement ce problème, Databricks vous recommande d’utiliser ipywidgets.
Vous ne devez pas accéder directement à l’état d’un widget dans des contextes asynchrones comme des threads, des sous-processus ou Structured Streaming (foreachBatch), car l’état du widget peut changer pendant l’exécution du code asynchrone. Si vous devez accéder à l’état du widget dans un contexte asynchrone, transmettez-le en tant qu’argument. Par exemple, si vous avez le code suivant qui utilise des threads :
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 recommande d’utiliser un argument à la place :
# 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()
En règle générale, les widgets ne peuvent pas transmettre d’arguments entre différents langages au sein d’un notebook. Vous pouvez créer un widget
arg1
dans une cellule Python, et l’utiliser dans une cellule SQL ou Scala si vous exécutez une cellule à la fois. Mais cela ne fonctionne pas si vous utilisez la fonction Exécuter tout ou exécutez le notebook en tant que travail. Voici quelques solutions de contournement :- Pour les notebooks qui ne mélangent pas de langues, vous pouvez créer un notebook pour chaque langue et transmettre les arguments lorsque vous exécutez le notebook.
- Vous pouvez accéder au widget à l’aide d’un appel
spark.sql()
. Par exemple, dans Python :spark.sql("select getArgument('arg1')").take(1)[0][0]
.
Bamboolib
Limites de bamboolib :
- L’utilisation de bamboolib pour le data wrangling est limitée à environ 10 millions de lignes. Cette limite est basée sur pandas et les ressources de calcul de votre cluster.
- L’utilisation de bamboolib pour les visualisations de données est limitée à environ 10 000 lignes. Cette limite est basée sur plotly.