FileType

Gilt für:check marked yes Databricks Runtime 18 LTS und höher

Important

Dieses Feature befindet sich in der Betaversion. Arbeitsbereichsadministratoren können den Zugriff auf dieses Feature über die Vorschauseite steuern. Siehe Manage Azure Databricks Previews.

FileType ist der PySpark-Typ für den SQL-Typ FILE , eine Referenz auf eine unstrukturierte Datei und deren Metadaten. Verwenden Sie es, um Parameter zu deklarieren FILE und Typen in Python benutzerdefinierten Funktionen (UDFs) zurückzugeben. In Python ist ein FILE Wert ein FileRef Objekt, das die Metadaten der Datei speichert und deren Bytes liest.

Für die SQL-Typreferenz und den konzeptionellen Überblick siehe FILE Typ und FILE-Typ sowie unstrukturierte Daten. Für Beispiele zur Dateiverarbeitung von UDF siehe Prozesse von Dateien mit UDFs.

Hinweis

Der Typ FILE wird auf serverlosen Notebooks nicht unterstützt. Es wird auf Notizbüchern unterstützt, die an serverlose Databricks-SQL-Warehouses angeschlossen sind.

Importieren

from pyspark.sql.types import FileType, FileRef

FileType

FileType ist eine Unterklasse von pyspark.sql.types.DataType. Verwenden Sie es als Parameter- oder Rückgabetyp eines UDF oder als Feldtyp in einem Schema.

FileType spezifiziert MANAGED nicht oder EXTERNAL. Diese Qualifikationen gelten nur für eine FILE Tabellenspalte, in der die Spalte bestimmt, ob eine Referenz als verwaltet oder extern gespeichert wird. Ein UDF übergibt und gibt Referenzen zurück, FILE und die Zielspalte entscheidet, wie jede Referenz gespeichert wird, wenn das Ergebnis in eine Tabelle geschrieben wird.

Du kannst sie auf folgende Weise verwenden FileType , die auch für SQL- und Scala-UDFs sowie für SQL-Speicherprozeduren gelten:

  • Als Top-Level-Typ.
  • Verschachtelt in einem StructType oder einem ArrayType.
  • Als Werttyp von , MapTypeaber nicht als MapType Schlüssel.
  • Innerhalb eines VariantType, aber nur für externe Dateien.

Wenn eine Abfrage eine FILE Spalte an Python zurückgibt, entweder innerhalb eines UDF oder über DataFrame.collect(), ist jeder Wert ein FileRef.

FileRef

A FileRef ist der Python-Wert für ein FILE. Es enthält die Metadaten der Datei und verfügt über Methoden, um die Bytes der Datei zu lesen und neue Referenzen zu erstellen.

Attribute

Attribute Typ Description
uri str Die URI der Datei. Immer bereit.
offset int Ein Offset in die Datei, in Bytes.
size int Die Größe der Datei in Bytes.
content_type str Der MIME-Typ der Datei, wenn bekannt.
checksum str Ein Integritätstoken für die Bytes der Datei, in der Form <algorithm>:<digest>. Für die anerkannten Algorithmen siehe Checksums.

Methodik

Methode Description
as_local_file() Kehrt a pathlib.Path zur Akte zurück. Geben Sie das Ergebnis an jede Bibliothek weiter, die einen Pfad akzeptiert. Verfügbar auf Azure Databricks Compute (Notebooks und UDF-Worker). Nicht verfügbar auf einem Databricks Connect-Client, wie etwa einer IDE oder lokalen Anwendung, die deinen Code außerhalb der Azure Databricks Compute ausführt.
open() Öffnet die Datei zum Binärlesen und gibt ein Dateiobjekt zurück. Der Anrufer schließt sie. Hat die gleiche Rechenanforderung wie as_local_file().
from_bytes(content, path=None, content_type=None) Klassenmethode. Lädt (einen bytes Wert) in den Unity-Katalog-Volumenpfad content hoch, gegeben durch path und gibt einen FileRefzurück. Fehlschlägt, wenn bereits eine Datei auf dem Zielpfad existiert. Wird nur innerhalb eines UDF unterstützt.
from_local_file(local_file, path=None, content_type=None) Klassenmethode. Lädt eine lokale Datei auf ein Unity-Katalog-Volume hoch und gibt ein FileRef. zurück. Die und-Parameter pathcontent_type verhalten sich wie in from_bytes. Wird nur innerhalb eines UDF unterstützt.

Example

Im folgenden Code erhält ein skalarer UDF einen FILE Wert als , FileReföffnet das Bild und gibt seine Dimensionen zurück:

from pyspark.sql.functions import col, udf
from pyspark.sql.types import StringType
from PIL import Image

@udf(returnType=StringType())
def image_resolution(file):
    with Image.open(file.as_local_file()) as img:
        return f"{img.width}x{img.height}"

spark.read.table("images").select(image_resolution(col("photo"))).display()

Für weitere Beispiele für die Dateiverarbeitung von UDF, einschließlich der Generierung von Dateien mit einem UDTF, siehe Dateien mit UDFs verarbeiten. Für allgemeine UDF-Erstellung siehe Python skalare benutzerdefinierte Funktionen (UDFs) und Python user-defined table functions (UDTFs).

Einschränkungen

Die Nutzung FileType in PySpark hat folgende Einschränkungen:

  • PySpark unterstützt kein Deklarieren FILE MANAGED oder FILE EXTERNAL Tabellenspalten oder das Bulk-Aufnehmen von Dateien. Nutze SQL für diese Operationen. PySpark unterstützt FILEnur , als FileType, in UDFs und Dateilesungen.
  • as_local_file() und open() benötigen clusterseitigen Zugriff, sodass sie auf einem Databricks Connect-Client nicht verfügbar sind. Rufen Sie sie stattdessen in einem UDF oder auf Cluster-Berechnung an.
  • Für from_bytes und from_local_fileleiten content_type Python-UDFs aus der Pfadendung ab, während Scala-UDFs diese aus den Magic Bytes der Datei ableiten.
  • Das Zurückgeben von a FileRef von einem UDF, das in eine Spalte FILE MANAGED schreibt, wird nicht unterstützt.