Compartir a través de


Uso de archivos en Azure Databricks

Azure Databricks tiene varias utilidades y API para interactuar con archivos en las siguientes ubicaciones:

  • Volúmenes del catálogo de Unity
  • Archivos del área de trabajo
  • Almacenamiento de objetos en la nube
  • Montajes de DBFS y raíz de DBFS
  • Almacenamiento efímero conectado al nodo de controlador del clúster

En este artículo se incluyen ejemplos para interactuar con archivos en estas ubicaciones para las siguientes herramientas:

  • Apache Spark
  • Spark SQL y Databricks SQL
  • Utilidades del sistema de archivos de Databricks (dbutils.fs o %fs)
  • CLI de Databricks
  • Databricks REST API
  • Comandos de shell de Bash (%sh)
  • Instalaciones en la biblioteca con ámbito de cuaderno mediante %pip
  • Pandas
  • Utilidades de procesamiento y administración de archivos de Python de OSS

Importante

Las operaciones de archivo que requieren acceso a datos FUSE no pueden acceder directamente al almacenamiento de objetos en la nube mediante URI. Databricks recomienda usar volúmenes de Catálogo de Unity para configurar el acceso a estas ubicaciones para FUSE.

Scala admite FUSE para volúmenes de Unity Catalog y archivos de área de trabajo en el proceso configurado con Unity Catalog y el modo de acceso compartido. En el proceso configurado con el modo de acceso de usuario único y Databricks Runtime 14.3 y versiones posteriores, Scala admite FUSE para archivos de área de trabajo y volúmenes de Unity Catalog, excepto los subprocesos que se originan en Scala, como el comando de Scala "cat /Volumes/path/to/file".!!.

Spark y otros procesos de JVM solo pueden acceder a los volúmenes o archivos del área de trabajo del catálogo de Unity mediante los lectores y escritores que admiten el catálogo de Unity. Por ejemplo, no puede especificar un archivo JAR como una dependencia en una configuración de Spark y no puede usar orígenes de datos personalizados de PySpark. Si tiene una carga de trabajo de JVM que proviene de bibliotecas que necesitan acceder a archivos en volúmenes o archivos del área de trabajo, copie los archivos en el almacenamiento local del sistema mediante comandos de Python o shell como %sh mv.. No uses %fs ni dbutils.fs, que usa la JVM. Si un archivo debe estar presente durante el inicio del clúster, use un script de inicialización para mover primero el archivo. Consulte ¿Qué son los scripts de inicialización?.

¿Es necesario proporcionar un esquema de URI para acceder a los datos?

Las rutas de acceso a datos de Azure Databricks siguen uno de los siguientes estándares:

  • Las rutas de acceso de estilo URI incluyen un esquema URI. En el caso de las soluciones de acceso a datos nativos de Databricks, los esquemas de URI son opcionales para la mayoría de los casos de uso. Al acceder directamente a los datos en el almacenamiento de objetos en la nube, debe proporcionar el esquema de URI correcto para el tipo de almacenamiento.

    diagrama de rutas de acceso URI

  • Las rutas de acceso de estilo POSIX proporcionan acceso a datos relativos a la raíz del controlador (/). Las rutas de acceso de estilo POSIX nunca requieren un esquema. Puede usar volúmenes de Catálogo de Unity o montajes DBFS para proporcionar acceso de estilo POSIX a los datos en el almacenamiento de objetos en la nube. Muchos marcos de ML y otros módulos de Python de OSS requieren FUSE y solo pueden usar rutas de acceso de estilo POSIX.

    diagrama de rutas posix

Trabajar con archivos en los volúmenes del Unity Catalog

Databricks recomienda usar volúmenes de Catálogo de Unity para configurar el acceso a archivos de datos no tabulares almacenados en el almacenamiento de objetos en la nube. Consulta ¿Qué son los volúmenes de Unity Catalog?.

Herramienta Ejemplo
Apache Spark spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()
Spark SQL y Databricks SQL SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`;
LIST '/Volumes/my_catalog/my_schema/my_volume/';
Utilidades del sistema de archivos de Databricks dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/")
%fs ls /Volumes/my_catalog/my_schema/my_volume/
CLI de Databricks databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/
Databricks REST API POST https://<databricks-instance>/api/2.1/jobs/create
{"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}
Comandos de shell de Bash %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip
Instalaciones de biblioteca %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl
Pandas df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')
Python de código abierto os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Nota

El esquema de dbfs:/ es necesario cuando se trabaja con la CLI de Databricks.

Limitaciones de volúmenes

Los volúmenes tienen las siguientes limitaciones:

  • No se admiten escrituras de adición directa o aleatorias (no secuenciales), como los archivos Zip y Excel. En el caso de las cargas de trabajo de anexión directa o escritura aleatoria, realice primero las operaciones en un disco local y, a continuación, copie los resultados en volúmenes de Catálogo de Unity. Por ejemplo:

    # python
    import xlsxwriter
    from shutil import copyfile
    
    workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
    worksheet = workbook.add_worksheet()
    worksheet.write(0, 0, "Key")
    worksheet.write(0, 1, "Value")
    workbook.close()
    
    copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx')
    
  • No se admiten archivos dispersos. Para copiar archivos dispersos, use cp --sparse=never:

    $ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    error writing '/dbfs/sparse.file': Operation not supported
    $ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    

Trabajar con archivos del área de trabajo

Los archivos del área de trabajo de Databricks son los archivos de un área de trabajo. Puede usar archivos de área de trabajo para almacenar y acceder a archivos como cuadernos, archivos de código fuente, archivos de datos y otros recursos del área de trabajo. Dado que los archivos de área de trabajo tienen restricciones de tamaño, Databricks solo recomienda almacenar archivos de datos pequeños aquí principalmente para desarrollo y pruebas.

Herramienta Ejemplo
Apache Spark spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()
Spark SQL y Databricks SQL SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;
Utilidades del sistema de archivos de Databricks dbutils.fs.ls("file:/Workspace/Users/<user-folder>/")
%fs ls file:/Workspace/Users/<user-folder>/
CLI de Databricks databricks workspace list
Databricks REST API POST https://<databricks-instance>/api/2.0/workspace/delete
{"path": "/Workspace/Shared/code.py", "recursive": "false"}
Comandos de shell de Bash %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip
Instalaciones de biblioteca %pip install /Workspace/Users/<user-folder>/my_library.whl
Pandas df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')
Python de código abierto os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

Nota

El esquema de file:/ es necesario cuando se trabaja con utilidades de Databricks, Apache Spark o SQL.

Para conocer las limitaciones al trabajar con archivos del espacio de trabajo, consulta Limitaciones.

¿Dónde van los archivos del área de trabajo eliminados?

Eliminar un archivo de espacio de trabajo lo envía a la papelera. Puede recuperar o eliminar permanentemente archivos de la papelera mediante la interfaz de usuario.

Consulta Eliminación de un objeto.

Trabajar con archivos en el almacenamiento de objetos en la nube

Databricks recomienda usar volúmenes de Catálogo de Unity para configurar el acceso seguro a los archivos en el almacenamiento de objetos en la nube. Debe configurar los permisos si decide acceder directamente a los datos en el almacenamiento de objetos en la nube mediante URI. Consulta Administración de ubicaciones externas, tablas externas y volúmenes externos.

En los ejemplos siguientes se usan URI para acceder a los datos en el almacenamiento de objetos en la nube:

Herramienta Ejemplo
Apache Spark spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show()
Spark SQL y Databricks SQL SELECT * FROM csv.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json`;LIST 'abfss://container-name@storage-account-name.dfs.core.windows.net/path';
Utilidades del sistema de archivos de Databricks dbutils.fs.ls("abfss://container-name@storage-account-name.dfs.core.windows.net/path/")%fs ls abfss://container-name@storage-account-name.dfs.core.windows.net/path/
CLI de Databricks No compatible
Databricks REST API No compatible
Comandos de shell de Bash No compatible
Instalaciones de biblioteca %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl
Pandas No compatible
Python de código abierto No compatible

Nota

Trabajo con archivos en montajes de DBFS y raíz de DBFS

Los montajes DBFS no son asegurables utilizando Unity Catalog y ya no se recomiendan por Databricks. Todos los usuarios del área de trabajo pueden acceder a los datos almacenados en la raíz de DBFS. Databricks recomienda no almacenar ningún código o datos confidenciales o de producción en la raíz de DBFS. Consulte ¿Qué es DBFS?.

Herramienta Ejemplo
Apache Spark spark.read.format("json").load("/mnt/path/to/data.json").show()
Spark SQL y Databricks SQL SELECT * FROM json.`/mnt/path/to/data.json`;
Utilidades del sistema de archivos de Databricks dbutils.fs.ls("/mnt/path")
%fs ls /mnt/path
CLI de Databricks databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file
Databricks REST API POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'
Comandos de shell de Bash %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip
Instalaciones de biblioteca %pip install /dbfs/mnt/path/to/my_library.whl
Pandas df = pd.read_csv('/dbfs/mnt/path/to/data.csv')
Python de código abierto os.listdir('/dbfs/mnt/path/to/directory')

Nota

El esquema de dbfs:/ es necesario cuando se trabaja con la CLI de Databricks.

Trabajar con archivos en almacenamiento efímero conectado al nodo del controlador

El almacenamiento efímero conectado al nodo del controlador es almacenamiento en bloque con acceso integrado a rutas basadas en POSIX. Los datos almacenados en esta ubicación desaparecen cuando un clúster finaliza o se reinicia.

Herramienta Ejemplo
Apache Spark No compatible
Spark SQL y Databricks SQL No está soportado
Utilidades del sistema de archivos de Databricks dbutils.fs.ls("file:/path")
%fs ls file:/path
CLI de Databricks No compatible
Databricks REST API No compatible
Comandos de shell de Bash %sh curl http://<address>/text.zip > /tmp/text.zip
Instalaciones de biblioteca No compatible
Pandas df = pd.read_csv('/path/to/data.csv')
Python de código abierto os.listdir('/path/to/directory')

Nota

El esquema de file:/ es necesario cuando se trabaja con utilidades de Databricks.

Mover datos de almacenamiento efímero a volúmenes

Es posible que quiera acceder a los datos descargados o guardados en el almacenamiento efímero mediante Apache Spark. Dado que el almacenamiento efímero está conectado al controlador y Spark es un motor de procesamiento distribuido, no todas las operaciones pueden acceder directamente a los datos aquí. Supongamos que debe mover datos del sistema de archivos del controlador a los volúmenes del catálogo de Unity. En ese caso, puedes copiar archivos mediante comandos magic o utilidades de Databricks, como en los ejemplos siguientes:

dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>

Recursos adicionales

Para obtener información sobre cómo cargar archivos locales o descargar archivos de Internet en Azure Databricks, consulte Carga de archivos en Azure Databricks.