Share via


Archivo binario

Databricks Runtime admite el origen de datos de un archivo binario, ya que lee archivos binarios y convierte cada archivo en un único registro que muestra el contenido sin procesar y los metadatos del archivo. El origen de datos del archivo binario genera un elemento DataFrame con las columnas siguientes y, posiblemente, las columnas de partición:

  • path (StringType): ruta de acceso del archivo.
  • modificationTime (TimestampType): Hora de modificación del archivo. En algunas implementaciones de Hadoop FileSystem, este parámetro podría no estar disponible y el valor se establecería en un valor predeterminado.
  • length (LongType): La longitud del archivo en bytes.
  • content (BinaryType): Contenido del archivo.

Para leer archivos binarios, especifique el origen de datos format como binaryFile.

Imágenes

Databricks recomienda usar el origen de datos de archivo binario para cargar datos de imagen.

La función de Databricks display admite la visualización de datos de imagen cargados mediante el origen de datos binario.

Si todos los archivos cargados tienen un nombre de archivo con una extensión de imagen, la vista previa de la imagen se habilita automáticamente:

df = spark.read.format("binaryFile").load("<path-to-image-dir>")
display(df)    # image thumbnails are rendered in the "content" column

image preview

Como alternativa, puede forzar la funcionalidad de vista previa de la imagen mediante la opción mimeType con un valor de cadena "image/*" para anotar la columna binaria. Las imágenes se descodifican en función de su información de formato en el contenido binario. Los tipos de imagen admitidos son bmp, gif, jpeg, y png. Los archivos no admitidos aparecen como un icono con forma de imagen rota.

df = spark.read.format("binaryFile").option("mimeType", "image/*").load("<path-to-dir>")
display(df)    # unsupported files are displayed as a broken image icon

image preview with unsupported file type

Vea Solución de referencia para aplicaciones de imagen para conocer el flujo de trabajo recomendado para controlar datos de imagen.

Opciones

Para cargar archivos con rutas de acceso que coincidan con un patrón global determinado mientras se mantiene el comportamiento de la detección de particiones, puede usar la opción pathGlobFilter. El código siguiente lee todos los archivos JPG del directorio de entrada con la detección de particiones:

df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("<path-to-dir>")

Si quiere omitir la detección de particiones y buscar archivos de forma recursiva en el directorio de entrada, use la opción recursiveFileLookup. Esta opción busca en directorios anidados incluso si sus nombres no siguen un esquema de nombres de partición como date=2019-07-01. El siguiente código lee todos los archivos JPG recursivamente desde el directorio de entrada e ignora el descubrimiento de particiones:

df = spark.read.format("binaryFile") \
  .option("pathGlobFilter", "*.jpg") \
  .option("recursiveFileLookup", "true") \
  .load("<path-to-dir>")

Existen API similares para Scala, Java y R.

Nota:

Para mejorar el rendimiento de lectura al volver a cargar datos, Azure Databricks recomienda desactivar la compresión al guardar los datos cargados desde archivos binarios:

spark.conf.set("spark.sql.parquet.compression.codec", "uncompressed")
df.write.format("delta").save("<path-to-table>")