Limitações conhecidas Notebooks Databricks
Este artigo aborda as limitações conhecidas dos notebooks Databricks. Para obter limites de recursos adicionais, consulte Limites de recursos.
Dimensionamento de notebook
- As células individuais do bloco de notas têm um limite de entrada de 6 MB.
- O tamanho máximo do bloco de anotações para salvar automaticamente, importar, exportar e clonar instantâneos de revisão é de 10 MB.
- Pode guardar manualmente blocos de notas até 32 MB.
Tabela de resultados do bloco de notas
- Os resultados da tabela são limitados a 10K linhas ou 2MB, o que for menor.
- Os clusters de tarefas têm um tamanho máximo de saída de bloco de notas de 30 MB.
- Os resultados de comandos não tabulares têm um limite de 20MB.
- Por padrão, os resultados de texto retornam um 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 de bloco de notas
Limitações do depurador de notebook:
- O depurador funciona apenas com Python. Não suporta Scala ou R.
- O depurador não funciona em clusters de modo de acesso compartilhado .
- O depurador não suporta a entrada em arquivos ou módulos externos.
- Não é possível executar outros comandos no bloco de anotações quando uma sessão de depuração está ativa.
Blocos de anotações do SQL warehouse
Limitações dos blocos de anotações de armazéns SQL:
- Quando anexado a um armazém SQL, os contextos de execução têm um tempo limite de inatividade de 8 horas
ipywidgets
Limitações de ipywidgets:
- Um bloco de anotações usando ipywidgets deve ser anexado a um cluster em execução.
- Os estados do widget não são preservados nas sessões do bloco de anotações. Você deve executar novamente as células do widget para processá-las sempre que anexar o bloco de anotações a um cluster.
- Os ipywidgets de senha e controlador não são suportados.
- 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 renderiza corretamente.) - Os widgets podem não renderizar corretamente se o notebook estiver no modo escuro, especialmente widgets coloridos.
- As saídas do widget não podem ser usadas nas visualizações do painel do bloco de anotações.
- O tamanho máximo da carga útil da mensagem para 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 Databricks:
Um máximo de 512 widgets podem ser criados em um notebook.
Um nome de widget é limitado a 1024 caracteres.
Um rótulo de widget é 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 lista suspensa.
Há um problema conhecido em que o estado de um widget pode não ser limpo corretamente depois de pressionar Executar tudo, mesmo depois de limpar ou remover o widget no código. Se isso acontecer, você verá uma discrepância entre os estados visual e impresso do widget. Executar novamente as células individualmente pode ignorar esse problema. Para evitar totalmente esse problema, o Databricks recomenda o uso de ipywidgets.
Você não deve acessar o estado do widget diretamente em contextos assíncronos, como threads, subprocessos ou streaming estruturado (foreachBatch), pois o estado do widget pode mudar 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 o uso de 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 conseguem passar argumentos entre idiomas diferentes dentro de um bloco de anotações. Você pode criar um widget
arg1
em uma célula Python e usá-lo em uma célula SQL ou Scala se executar uma célula de cada vez. No entanto, isso não funciona se você usar Executar tudo ou executar o bloco de anotações como um trabalho. Algumas soluções alternativas são:- Para blocos de notas que não misturam idiomas, pode criar um bloco de notas para cada idioma e passar os argumentos quando executar o bloco de notas.
- Você pode acessar o widget usando uma
spark.sql()
chamada. Por exemplo, em Python:spark.sql("select getArgument('arg1')").take(1)[0][0]
.