Condividi tramite


Limitazioni note dei notebook di Databricks

Questo articolo illustra le limitazioni note dei notebook di Databricks. Per altri limiti delle risorse, vedere Limiti delle risorse.

Ridimensionamento dei notebook

  • Le singole celle del notebook hanno un limite di input di 6 MB.
  • La dimensione massima del notebook per il salvataggio automatico, l'importazione, l'esportazione e la clonazione degli snapshot di revisione è di 10 MB.
  • È possibile salvare manualmente i notebook fino a 32 MB.

Output delle celle del notebook

  • I risultati della tabella sono limitati a 10 K righe o 2 MB, a seconda di quale dei due limiti viene prima.
  • I cluster di processi hanno una dimensione massima di output del notebook di 30 MB.
  • In Databricks Runtime 17.0 e versioni successive:
    • Per impostazione predefinita, le dimensioni massime di output delle celle sono pari a 10 MB.
    • Questo limite può essere personalizzato nelle celle Python per qualsiasi valore compreso tra 1 MB e 20 MB (inclusi) usando il magic della cella seguente: %set_cell_max_output_size_in_mb <size_in_MB>. Questo limite verrà quindi applicato a tutte le celle del notebook.
    • Quando l'output della cella supera il limite di dimensioni configurato, l'output viene troncato per rientrare nel limite. Il troncamento viene applicato in modo da preservare il più output utile possibile.
  • In Databricks Runtime 16.4 LTS e versioni successive:
    • I risultati di testo restituiscono un massimo di 50.000 caratteri.
    • In Databricks Runtime 12.2 e versioni successive è possibile aumentare questo limite fino a 20 MB impostando la proprietà di configurazione spark , spark.databricks.driver.maxReplOutputLength.
    • Quando l'output della cella supera il limite di dimensioni configurato, l'output viene completamente rimosso.

Debugger del notebook

Limitazioni del debugger del notebook:

  • Il debugger funziona solo con Python. Non supporta Scala o R.
  • Per accedere al debugger, il notebook deve essere connesso a una delle risorse di calcolo seguenti:
    • di calcolo serverless
    • Calcolo con la modalità di accesso impostata su Standard (in precedenza condiviso) in Databricks Runtime 14.3 LTS e versioni successive.
    • Calcolo con modalità di accesso impostata su Dedicato (in precedenza utente singolo) in Databricks Runtime 13.3 LTS e versioni successive
    • Calcolo con modalità di accesso impostata su Nessun isolamento condiviso in Databricks Runtime 13.3 LTS e versioni successive
  • Il debugger non supporta l'esecuzione di istruzioni in file o moduli esterni.
  • Non è possibile eseguire altri comandi nel notebook quando è attiva una sessione di debug.
  • Il debugger non supporta il debug nei sottoprocessi quando si è connessi a calcolo serverless e a cluster con modalità di accesso impostata su Standard.

Notebook di SQL Warehouse

Limitazioni dei notebook di SQL Warehouse:

  • Quando si è collegati a un data warehouse SQL, i contesti di esecuzione hanno un timeout di inattività di 8 ore.

ipywidgets (una libreria Python per widget interattivi)

Limitazioni di ipywidgets:

  • Un notebook che usa ipywidgets deve essere collegato a un cluster in esecuzione.
  • Gli stati del widget non vengono mantenuti tra le sessioni del notebook. È necessario eseguire nuovamente le celle del widget per eseguirne il rendering ogni volta che si collega il notebook a un cluster.
  • Gli ipywidget password e controller non sono supportati.
  • I widget HTMLMath e Label con espressioni LaTeX non vengono visualizzati correttamente. Ad esempio, widgets.Label(value=r'$$\frac{x+1}{x-1}$$') il rendering non viene eseguito correttamente.
  • I widget potrebbero non essere visualizzati correttamente se il notebook è in modalità scura, in particolare i widget colorati.
  • Gli output dei widget non possono essere usati nelle visualizzazioni del dashboard del notebook.
  • La dimensione massima del payload del messaggio per un ipywidget è di 5 MB. Il rendering dei widget che usano immagini o dati di testo di grandi dimensioni potrebbe non essere eseguito correttamente.

Widget di Databricks

Limitazioni dei widget di Databricks:

  • È possibile creare un massimo di 512 widget in un notebook.

  • Un nome di widget è limitato a 1024 caratteri.

  • Un'etichetta del widget è limitata a 2048 caratteri.

  • Un massimo di 2048 caratteri può essere immesso in un widget di testo.

  • Possono essere disponibili un massimo di 1024 opzioni per un widget a selezione multipla, casella combinata o elenco a discesa.

  • Si verifica un problema noto per cui uno stato del widget potrebbe non essere chiaro correttamente dopo aver premuto Esegui tutto, anche dopo aver cancellato o rimosso il widget nel codice. In questo caso, si noterà una discrepanza tra gli stati di visualizzazione e stampati del widget. La ripetizione dell'esecuzione delle celle singolarmente potrebbe ignorare questo problema. Per evitare completamente questo problema, Databricks consiglia di usare ipywidgets.

  • Non è consigliabile accedere allo stato del widget direttamente in contesti asincroni come thread, sottoprocessi o Structured Streaming (foreachBatch), perché lo stato del widget può cambiare durante l'esecuzione del codice asincrono. Se è necessario accedere allo stato del widget in un contesto asincrono, passarlo come argomento. Ad esempio, se si dispone del codice seguente che usa thread:

    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 consiglia invece di usare un argomento:

    # 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()
    
  • I widget non possono in genere passare argomenti tra lingue diverse all'interno di un notebook. È possibile creare un widget arg1 in una cella Python e usarlo in una cella SQL o Scala se si esegue una cella alla volta. Tuttavia, questo non funziona se si usa Esegui tutto o si esegue il notebook come processo. Alcune soluzioni alternative sono:

    • Per i notebook che non combinano lingue, è possibile creare un notebook per ogni lingua e passare gli argomenti quando si esegue il notebook.
    • È possibile accedere al widget usando una spark.sql() chiamata. Ad esempio, in Python: spark.sql("select getArgument('arg1')").take(1)[0][0].