Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
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
StructTypeoder einemArrayType. - Als Werttyp von ,
MapTypeaber nicht alsMapTypeSchlü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 MANAGEDoderFILE EXTERNALTabellenspalten oder das Bulk-Aufnehmen von Dateien. Nutze SQL für diese Operationen. PySpark unterstütztFILEnur , alsFileType, in UDFs und Dateilesungen. -
as_local_file()undopen()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_bytesundfrom_local_fileleitencontent_typePython-UDFs aus der Pfadendung ab, während Scala-UDFs diese aus den Magic Bytes der Datei ableiten. - Das Zurückgeben von a
FileRefvon einem UDF, das in eine SpalteFILE MANAGEDschreibt, wird nicht unterstützt.