Partager via


Fichier binaire

Databricks Runtime prend en charge les fichiers binaires et convertit chacun d’eux en un enregistrement unique qui contient le contenu brut et les métadonnées du fichier. La source de données de fichier binaire produit un DataFrame avec les colonnes suivantes et éventuellement des colonnes de partition :

  • path (StringType) : Chemin d'accès au fichier.
  • modificationTime (TimestampType) : Heure de dernière modification de l'événement. Dans certaines implémentations Hadoop FileSystem, ce paramètre peut ne pas être disponible et la valeur est définie sur une valeur par défaut.
  • length (LongType) : Longueur du fichier en octets.
  • content (BinaryType) : Contenu du fichier.

Pour lire les fichiers binaires, spécifiez binaryFile pour le format de la source de données.

Images

Databricks recommande d’utiliser la source de données de fichier binaire pour charger des données d’image.

La fonction Databricks display prend en charge l’affichage des données d’image chargées à l’aide de la source de données binaire.

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

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

image preview

Vous pouvez également forcer la fonctionnalité d’aperçu de l’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’images 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.

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

Pour plus d’informations sur le flux de travail recommandé pour traiter les données d’image, consultez Solution de référence pour les applications image.

Options

Pour charger des fichiers avec des chemins d’accès correspondant à un modèle Glob donné tout en conservant le comportement de la 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 :

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

Si vous souhaitez ignorer la détection de partition et rechercher des fichiers de manière récursive dans le répertoire d’entrée, utilisez l’option recursiveFileLookup. Cette option effectue une recherche dans les répertoires imbriqués même si leurs noms ne suivent pas un schéma d’affectation de noms 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étection de la partition :

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

Des API similaires existent pour Scala, Java et R.

Notes

Pour améliorer les performances de lecture lors du chargement des données, Azure Databricks recommande de désactiver la compression quand vous enregistrez des données chargées à partir de fichiers binaires :

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