Aller au contenu principal

Lisez les fichiers binaires

Databricks prend en charge la source de données de fichier binaire, qui lit les fichiers binaires et convertit chaque fichier en un seul enregistrement contenant le contenu brut et les métadonnées du fichier. Il est couramment utilisé pour charger des données non structurées telles que des images, de l’audio ou des fichiers PDF pour un traitement en aval ou une inférence ML. Pour lire des fichiers binaires, spécifiez la source de données format comme binaryFile.

Prérequis

Databricks ne nécessite pas de configuration supplémentaire pour utiliser les fichiers binaires.

Options

Utilisez les méthodes .option() et .options() de DataFrameReader pour configurer la source de données de fichiers binaires. Pour une liste complète des options prises en charge, voir référence des options Spark API.

Schéma de sortie

La source de données de fichier binaire produit un DataFrame avec les colonnes suivantes, plus toutes les colonnes de partition :

  • path (StringType): Le chemin d’accès du fichier.
  • modificationTime (TimestampType): l’heure de modification du fichier. Dans certaines implémentations de système de fichiers Hadoop, ce paramètre peut être indisponible et la valeur serait définie par default.
  • length (LongType): La longueur du fichier en octets.
  • content (BinaryType): Le contenu du fichier.

Utilisation

Les exemples suivants illustrent le chargement de fichiers binaires à l'aide de l'API Spark DataFrame et de SQL, le filtrage par type de fichier, l'affichage des aperçus d'images et l'enregistrement dans une table Delta pour des performances de lecture améliorées.

Lisez les fichiers binaires

Utilisez l'API Apache Spark DataFrame pour charger des fichiers binaires dans un DataFrame pour la transformation, l'affichage ou le traitement en aval.

Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/")
display(df)

Configurer les options de lecture

Pour charger des fichiers dont les chemins correspondent à un modèle glob donné tout en conservant le comportement de découverte de partition, vous pouvez utiliser l'option pathGlobFilter. Le code suivant lit tous les fichiers JPG du répertoire d'entrée avec la découverte de partition :

Python
df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("/Volumes/<catalog>/<schema>/<volume>/images/")

Si vous souhaitez ignorer la découverte de partition et rechercher des fichiers de manière récursive dans le répertoire d'entrée, utilisez l'option recursiveFileLookup. Cette option recherche dans les répertoires imbriqués même si leurs noms ne suivent pas un schéma de nommage de partition comme date=2019-07-01. Le code suivant lit tous les fichiers JPG de manière récursive à partir du répertoire d'entrée et ignore la découverte de partition :

Python
df = (spark.read.format("binaryFile")
.option("pathGlobFilter", "*.jpg")
.option("recursiveFileLookup", "true")
.load("/Volumes/<catalog>/<schema>/<volume>/images/"))

Charger et afficher des images

Databricks vous recommande d'utiliser la source de données de fichier binaire pour charger des données d'image. La fonction display de Databricks prend en charge l'affichage des données d'image chargées à l'aide de la source de données binaires.

Si tous les fichiers chargés ont un nom de fichier avec une extension d'image, l'aperçu de l'image est automatiquement activé :

Python
df = spark.read.format("binaryFile").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df) # image thumbnails are rendered in the "content" column

Prévisualisation de l&#39;image

Vous pouvez également forcer la fonctionnalité de prévisualisation d'image en utilisant l'option mimeType avec une valeur de chaîne "image/*" pour annoter la colonne binaire. Les images sont décodées en fonction de leurs informations de format dans le contenu binaire. Les types d'image pris en charge sont bmp, gif, jpeg et png. Les fichiers non pris en charge apparaissent sous la forme d'une icône d'image cassée.

Python
df = spark.read.format("binaryFile").option("mimeType", "image/*").load("/Volumes/<catalog>/<schema>/<volume>/images/")
display(df)

Aperçu de l&#39;image avec un type de fichier non pris en charge

Consultez la solution de référence pour les applications d'images pour le workflow recommandé afin de gérer les données d'image.

Enregistrer dans une table Delta

Pour améliorer les performances de lecture lorsque vous rechargez des données, Databricks recommande d'enregistrer les données chargées depuis des fichiers binaires dans une table Delta.

Python
df.write.format("delta").saveAsTable("<catalog>.<schema>.<table>")

Ressources supplémentaires

  • Lire les fichiers image: si votre charge de travail requiert des champs d’image structurés tels que la hauteur, la largeur et les données du canal de distribution plutôt que des octets bruts, la source de données d’image fournit un schéma décodé.