Limitações conhecidas dos notebooks do Databricks
Este artigo aborda as limitações conhecidas dos notebooks do Databricks. Para obter limites dos recursos adicionais, consulte Limites de recursos.
Dimensionamento do bloco de anotações
- As células individuais do notebook possuem um limite de entrada de 6 MB.
- O tamanho máximo do notebook para salvamento automático, importação, exportação e clonagem dos instantâneos de revisão é de 10 MB.
- Você pode salvar manualmente os notebooks de até 32 MB.
Tabela de resultados do bloco de anotações
- Os resultados da tabela são limitados a 10 mil linhas ou 2 MB, o que for menor.
- Os clusters de tarefas têm um tamanho máximo de saída do notebook de 30 MB.
- Os resultados dos comandos não tabulares têm um limite de 20 MB.
- Por padrão, os resultados do texto retornam no máximo de 50.000 caracteres. Com o Databricks Runtime 12.2 LTS e superior, você pode aumentar esse limite definindo a propriedade
spark.databricks.driver.maxReplOutputLength
de configuração do Spark.
Depurador do bloco de anotações
Limitações do depurador do notebook:
- O depurador funciona apenas com Python. Ele não dá suporte a Scala ou R.
- O depurador não funciona em clusters no modo de acesso Compartilhado.
- O depurador não dá suporte à entrada em arquivos ou módulos externos.
- Você não pode executar outros comandos no notebook quando uma sessão de depuração estiver ativa.
Notebooks do SQL Warehouse
Limitações dos Notebooks do SQL Warehouses:
- Quando anexados a um SQL warehouse, os contextos de execução têm um tempo limite ocioso de 8 horas.
ipywidgets
Limitações do ipywidgets:
- Um notebook que usa ipywidgets precisa ser anexado a um cluster em execução.
- Os estados do Widget não são preservados entre as sessões do notebook. Você precisará executar novamente as células do widget para renderizá-las sempre que anexar o notebook a um cluster.
- Não há suporte para ipywidgets de senha e controlador.
- Os widgets HTMLMath e Label com expressões LaTeX não são renderizados corretamente. (Por exemplo,
widgets.Label(value=r'$$\frac{x+1}{x-1}$$')
não é renderizado corretamente.) - É possível que os widgets não sejam renderizados corretamente se o notebook estiver no modo escuro, especialmente os widgets coloridos.
- As saídas de widget não podem ser usadas nas exibição de painel do notebook.
- O tamanho máximo do conteúdo da mensagem de um ipywidget é de 5 MB. Widgets que usam imagens ou dados de texto grandes podem não ser renderizados corretamente.
Widgets do Databricks
Limitações dos Widgets do Databricks:
Um máximo de 512 widgets pode ser criado em um notebook.
O nome do widget está limitado a 1024 caracteres.
Um rótulo do widget está limitado a 2048 caracteres.
Um máximo de 2048 caracteres pode ser inserido em um widget de texto.
Pode haver um máximo de 1024 opções para um widget de seleção múltipla, caixa de combinação ou menu suspenso.
Há um problema conhecido em que é possível que o estado de um widget não seja limpo corretamente após clicar em Executar Todos, mesmo depois de limpar ou remover o widget no código. Se isso acontecer, você verá uma discrepância entre o estado visual e impresso do widget. Executar novamente as células individualmente pode ignorar esse problema. Para evitar esse problema completamente, o Databricks recomenda usar ipywidgets.
Você não deve acessar o estado do widget diretamente em contextos assíncronos, como threads, subprocessos ou Fluxo Estruturado (foreachBatch), pois o estado do widget pode ser alterado enquanto o código assíncrono está em execução. Se você precisar acessar o estado do widget em um contexto assíncrono, passe-o como um argumento. Por exemplo, se você tiver o seguinte código que usa 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()
Em vez disso, o Databricks recomenda usar um argumento:
# 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()
Geralmente, os widgets não podem passar argumentos entre diferentes linguagens em um notebook. É possível criar um widget
arg1
em uma célula do Python e usá-lo em uma célula do SQL ou Scala se você executar uma célula de cada vez. No entanto, isso não funcionará se você usar Executar todos ou executar o notebook como trabalho. Algumas soluções alternativas são:- Para notebooks que não combinam idiomas, você pode criar um notebook para cada idioma e passar os argumentos ao executar o notebook.
- Você pode acessar o widget usando uma chamada
spark.sql()
. Por exemplo, em Python:spark.sql("select getArgument('arg1')").take(1)[0][0]
.