Cluster cancela execução de comando python devido a conflito na biblioteca

Problema

O aglomerado regressa Cancelled num caderno Python. Os cadernos em todas as outras línguas executam com sucesso no mesmo cluster.

Causa

Quando instala uma versão conflituosa de uma biblioteca, ipython ipywidgets como, numpy ou para o scipy , pandas PYTHONPATH então, o Python REPL pode quebrar, fazendo com que todos os comandos regressem Cancelled após 30 segundos. Isto também quebra %sh, o macro de caderno que permite introduzir scripts de concha em células de portátil Python.

Nota

Solução

Para resolver este problema, faça o seguinte:

  1. Identifique a biblioteca conflituosa e desinstale-a.
  2. Instale a versão correta da biblioteca num portátil ou com um script init com âmbito de cluster.

Identifique a biblioteca conflituosa

  1. Desinstale cada biblioteca uma de cada vez, e verifique se o Python REPL ainda quebra.
  2. Se o REPL ainda se partir, reinstale a biblioteca que removeu e retire a seguinte.
  3. Quando encontrar a biblioteca que faz com que o REPL se rompa, instale a versão correta dessa biblioteca utilizando um dos dois métodos abaixo.

Também pode inspecionar o registo do controlador std.err () para o cluster (na página de Configuração do Cluster) para obter um traço de pilha e uma mensagem de erro que possa ajudar a identificar o conflito da biblioteca.

Instale a biblioteca correta

Execute uma das seguintes ações.

Opção 1: Instalar num bloco de notas utilizando pip3

%sh sudo apt-get -y install python3-pip
  pip3 install <library-name>

Opção 2: Instalar utilizando um script init com âmbito de cluster

Siga os passos abaixo para criar um script init com âmbito de cluster que instala a versão correta da biblioteca. Substitua <library-name> nos exemplos pelo nome de ficheiro da biblioteca para instalar.

  1. Se o script init já não existir, crie um diretório base para armazená-lo:

    dbutils.fs.mkdirs("dbfs:/databricks/<directory>/")
    
  2. Crie o seguinte script:

    dbutils.fs.put("/databricks/init/cluster-name/<library-name>.sh","""
     #!/bin/bash
     sudo apt-get -y install python3-pip
     sudo pip3 install <library-name>
     """, True)
    
  3. Confirme que o script existe:

    display(dbutils.fs.ls("dbfs:/databricks/<directory>/<library-name>.sh"))
    
  4. Vá à página de configuração do cluster e clique nas Opções Avançadas para alternar.

  5. Na parte inferior da página, clique no separador Scripts Init:

    não-texto alternativo

  6. No drop-down destino, selecione DBFS, forneça o caminho do ficheiro para o script, e clique em Adicionar.

  7. Reinicie o aglomerado.