Binärdatei

Databricks Runtime unterstützt die Datenquelle Binärdatei, die Binärdateien liest und jede Datei in einen einzelnen Datensatz konvertiert, der den unformatierten Inhalt und die Metadaten der Datei enthält. Dieser Datenquellentyp erzeugt einen DataFrame, der die folgenden Spalten und möglicherweise Partitionsspalten enthält:

  • path (StringType): Der Pfad der Datei.
  • modificationTime (TimestampType): Der Zeitpunkt der letzten Änderung der Datei. In einigen HDFS-Implementierungen (Hadoop FileSystem) ist dieser Parameter möglicherweise nicht verfügbar, und der Wert wird auf einen Standardwert festgelegt.
  • length (LongType): Die Länge der Datei in Byte.
  • content (BinaryType): Der Inhalt der Datei.

Um Binärdateien zu lesen, geben Sie die Datenquelle format als binaryFile an.

Bilder

Databricks empfiehlt, die Binärdateidatenquelle zum Laden von Bilddaten zu verwenden.

Die Databricks-Funktion display unterstützt die Anzeige von Bilddaten, die mithilfe der binären Datenquelle geladen wurden.

Wenn alle geladenen Dateien einen Dateinamen mit einer Erweiterung für Bilddateien aufweisen, wird automatisch die Bildvorschau aktiviert:

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

image preview

Alternativ können Sie die Bildvorschau erzwingen, indem Sie die Option mimeType mit einem Zeichenfolgenwert "image/*" verwenden, um die Binärspalte zu kommentieren. Bilder werden basierend auf ihren Formatinformationen im binären Inhalt decodiert. Unterstützte Bildtypen sind bmp, gif, jpeg und png. Nicht unterstützte Dateien werden mit einem Symbol für ein defektes Bild angezeigt.

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

Siehe Referenzlösung für Bildanwendungen für den empfohlenen Workflow zum Umgang mit Image-Daten.

Optionen

Zum Laden von Dateien mit Pfaden, die einem bestimmten Globmuster entsprechen, während das Verhalten der Partitionsermittlung beibehalten wird, können Sie die Option pathGlobFilter verwenden. Der folgende Code liest mittels Partitionsermittlung alle JPG-Dateien aus dem Eingabeverzeichnis:

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

Wenn Sie die Partitionsermittlung ignorieren und Dateien im Eingabeverzeichnis rekursiv durchsuchen möchten, verwenden Sie die Option recursiveFileLookup. Mit dieser Option werden geschachtelte Verzeichnisse auch dann durchsucht, wenn ihre Namen nicht einem Partitionsbenennungsschema wie date=2019-07-01 folgen. Der folgende Code liest alle JPG-Dateien rekursiv aus dem Eingabeverzeichnis und ignoriert die Partitionsermittlung:

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

Ähnliche APIs sind für Scala, Java und R vorhanden.

Hinweis

Um die Leseleistung beim Zurückladen von Daten zu verbessern, empfiehlt Azure Databricks eine Deaktivierung der Komprimierung, wenn Sie aus Binärdateien geladene Daten speichern:

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