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 uma limit 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.
Resultados do Notebook table
- Table resultados 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 limitde 20 MB.
- 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 limit definindo a propriedade de configuração do Spark
spark.databricks.driver.maxReplOutputLength
.
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 no painel do notebook views.
- 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 multi-select, caixa combinada ou menu pendente.
Há um problema conhecido where, um estado do widget pode não ser limpo corretamente após 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]
.