Descarga de datos desde Internet
En este artículo se describen los patrones para agregar datos de Internet a Azure Databricks.
Azure Databricks no proporciona ninguna herramienta nativa para descargar datos de Internet, pero puede usar herramientas de código abierto en los lenguajes admitidos para descargar los archivos mediante cuadernos.
Databricks recomienda usar volúmenes de Unity Catalog para almacenar todos los datos no tabulares. Opcionalmente, puede especificar un volumen como destino durante la descarga o mover datos a un volumen después de la descarga.
Nota:
Si no especifica una ruta de acceso de salida, la mayoría de las herramientas de código abierto tienen como destino un directorio en el almacenamiento efímero. Vea Descarga de un archivo en almacenamiento efímero.
Los volúmenes no admiten escrituras aleatorias. Si necesita descomprimir archivos descargados, Databricks recomienda descargarlos para almacenarlos efímeros y descomprimirlos antes de moverlos a volúmenes. Consulte Expansión y lectura de archivos comprimidos ZIP.
Si accede a los datos desde el almacenamiento de objetos en la nube, acceder a los datos directamente con Apache Spark proporciona mejores resultados. Consulte Conexión a orígenes de datos.
Algunas configuraciones del área de trabajo podrían impedir el acceso a la red pública de Internet. Si necesita acceso de red ampliado, consulte al administrador del área de trabajo.
Descarga de un archivo en un volumen
Databricks recomienda almacenar todos los datos no tabulares en volúmenes de Unity Catalog.
En los siguientes ejemplos se usan paquetes para Bash, Python y Scala para descargar un archivo en un volumen de Unity Catalog:
Bash
%sh curl https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv --output /Volumes/my_catalog/my_schema/my_volume/curl-subway.csv
Python
import urllib
urllib.request.urlretrieve("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv", "/Volumes/my_catalog/my_schema/my_volume/python-subway.csv")
Scala
import java.net.URL
import java.io.File
import org.apache.commons.io.FileUtils
FileUtils.copyURLToFile(new URL("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv"), new File("/Volumes/my_catalog/my_schema/my_volume/scala-subway.csv"))
Descarga de un archivo en almacenamiento efímero
En los siguientes ejemplos se usan paquetes para Bash, Python y Scala para descargar un archivo en el almacenamiento efímero asociado al controlador:
Bash
%sh curl https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv --output /tmp/curl-subway.csv
Python
import urllib
urllib.request.urlretrieve("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv", "/tmp/python-subway.csv")
Scala
import java.net.URL
import java.io.File
import org.apache.commons.io.FileUtils
FileUtils.copyURLToFile(new URL("https://data.cityofnewyork.us/api/views/kk4q-3rt2/rows.csv"), new File("/tmp/scala-subway.csv"))
Dado que estos archivos se descargan en el almacenamiento efímero conectado al controlador, use %sh
para ver estos archivos, como en el siguiente ejemplo:
%sh ls /tmp/
Puede usar comandos de Bash para obtener una vista previa del contenido de los archivos descargados de esta manera, como en el ejemplo siguiente:
%sh head /tmp/curl-subway.csv
Traslado de datos con dbutils
Para acceder a los datos con Apache Spark, debe trasladarlos del almacenamiento efímero al almacenamiento de objetos en la nube. Databricks recomienda usar volúmenes para administrar todo el acceso al almacenamiento de objetos en la nube. Consulte Conexión a orígenes de datos.
Las utilidades de Databricks (dbutils
) permiten trasladar archivos del almacenamiento efímero asociado al controlador a otras ubicaciones, incluidos los volúmenes de Unity Catalog. En el siguiente ejemplo se mueven los datos a un volumen de ejemplo:
dbutils.fs.mv("file:/tmp/curl-subway.csv", "/Volumes/my_catalog/my_schema/my_volume/subway.csv")
Lectura de datos descargados
Después de trasladar los datos a un volumen, puede leerlos como normales. El siguiente código lee los datos CSV movidos a un volumen:
df = spark.read.format("csv").option("header", True).load("/Volumes/my_catalog/my_schema/my_volume/subway.csv")
display(df)