El clúster cancela la ejecución de comandos de Python debido a un conflicto de biblioteca

Problema

El clúster devuelve Cancelled en un cuaderno de Python. Los cuadernos de todos los demás lenguajes se ejecutan correctamente en el mismo clúster.

Causa

Al instalar una versión en conflicto de una biblioteca, como , , , o en , el REPL de Python puede interrumpirse, lo que hace que todos los comandos vuelvan después de ipython ipywidgets numpy scipy pandas PYTHONPATH Cancelled 30 segundos. Esto también rompe %sh, la macro del cuaderno que le permite escribir scripts de shell en las celdas del cuaderno de Python.

Nota

Solución

Para resolver el problema, realice una de las acciones siguientes:

  1. Identifique la biblioteca en conflicto y desinstale la biblioteca.
  2. Instale la versión correcta de la biblioteca en un cuaderno o con un script de inicio de ámbito de clúster.

Identificación de la biblioteca en conflicto

  1. Desinstale cada biblioteca de una en una y compruebe si la REPL de Python todavía se interrumpe.
  2. Si el REPL todavía se interrumpe, vuelva a instalar la biblioteca que quitó y quite la siguiente.
  3. Cuando encuentre la biblioteca que provoca la interrupción de REPL, instale la versión correcta de esa biblioteca mediante uno de los dos métodos siguientes.

También puede inspeccionar el registro de controladores ( ) del clúster (en la página Configuración del clúster) para ver un seguimiento de la pila y un mensaje de error que pueda ayudar a identificar el conflicto std.err de la biblioteca.

Instalación de la biblioteca correcta

Realice una de las acciones siguientes.

Opción 1: Instalar en un cuaderno mediante pip3

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

Opción 2: Instalación mediante un script de inicio de ámbito de clúster

Siga estos pasos para crear un script de init con ámbito de clúster que instale la versión correcta de la biblioteca. Reemplace <library-name> en los ejemplos por el nombre de archivo de la biblioteca que se instalará.

  1. Si el script init aún no existe, cree un directorio base para almacenarlo:

    dbutils.fs.mkdirs("dbfs:/databricks/<directory>/")
    
  2. Cree el siguiente 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 el script existe:

    display(dbutils.fs.ls("dbfs:/databricks/<directory>/<library-name>.sh"))
    
  4. Vaya a la página de configuración del clúster y haga clic en el botón de alternancia Opciones avanzadas.

  5. En la parte inferior de la página, haga clic en la pestaña Scripts de inicio:

    no-alternative-text

  6. En la lista desplegable Destino, seleccione DBFS, proporcione la ruta de acceso del archivo al script y haga clic en Agregar.

  7. Reinicie el clúster.