FileType

Gäller för:check markerat ja Databricks Runtime 18 LTS och senare

Important

Den här funktionen finns i Beta. Arbetsyteadministratörer kan styra åtkomsten till den här funktionen från sidan Förhandsversioner . Se Hantera förhandsversioner av Azure Databricks.

FileType är PySpark-typen för SQL-typen FILE , en referens till en ostrukturerad fil och dess metadata. Använd den för att deklarera FILE parametrar och returnera typer i Python-användardefinierade funktioner (UDF). I Python är ett FILE värde ett FileRef objekt som innehåller filens metadata och läser dess bytes.

För SQL-typreferens och konceptuell översikt, se FILE typ och FIL-typ samt ostrukturerad data. För exempel på filbehandling av UDF, se Process files with UDF.

Anmärkning

Typen FILE stöds inte på serverlösa anteckningsböcker. Det stöds på anteckningsböcker kopplade till serverlösa Databricks SQL-lager.

Import

from pyspark.sql.types import FileType, FileRef

FileType

FileType är en underklass av pyspark.sql.types.DataType. Använd det som parameter- eller returtyp för en UDF, eller som fälttyp i ett schema.

FileType specificerar MANAGED inte eller EXTERNAL. Dessa kvalificeringar gäller endast för en FILE tabellkolumn, där kolumnen avgör om en referens lagras som hanterad eller extern. En UDF skickar och returnerar FILE referenser, och målkolumnen avgör hur varje referens lagras när du skriver resultatet till en tabell.

Du kan använda FileType på följande sätt, vilka även gäller för SQL och Scala UDF samt för SQL-lagrade procedurer:

  • Som en toppnivå-typ.
  • Inbäddad i en StructType eller en ArrayType.
  • Som värdetyp av en MapType, men inte som en MapType nyckel.
  • Inuti en VariantType, men bara för externa filer.

När en fråga returnerar en FILE kolumn till Python, antingen inuti en UDF eller genom DataFrame.collect(), är varje värde ett FileRef.

FileRef

A FileRef är Python-värdet för en FILE. Den innehåller filens metadata och har metoder för att läsa filens byte och skapa nya referenser.

Attribut

Attribute Type Description
uri str URI:n för filen. Alltid inställt.
offset int En offset in i filen, i bytes.
size int Storleken på filen i byte.
content_type str MIME-typen på filen, när den är känd.
checksum str En integritetstoken för filens bytes, av formen <algorithm>:<digest>. För de erkända algoritmerna, se Checksums.

Methods

Metod Description
as_local_file() Återvänder till pathlib.Path filen. Skicka resultatet till vilket bibliotek som helst som accepterar en väg. Tillgänglig på Azure Databricks compute (notebooks och UDF-arbetare). Inte tillgängligt på en Databricks Connect-klient, såsom en IDE eller lokal applikation som kör din kod utanför Azure Databricks beräkning.
open() Öppnar filen för binärläsning och returnerar ett filobjekt. Uppringaren stänger den. Har samma beräkningskrav som as_local_file().
from_bytes(content, path=None, content_type=None) Klassmetod. Laddar upp (ett bytes värde) till Unity Catalog-volymvägen content given av path och returnerar en FileRef. Misslyckas om en fil redan finns på målsökvägen. Stöds endast i en UDF.
from_local_file(local_file, path=None, content_type=None) Klassmetod. Laddar upp en lokal fil till en Unity Catalog-volym och returnerar en FileRef. Och-parametrarna pathcontent_type beter sig som i from_bytes. Stöds endast i en UDF.

Example

I följande kod får en skalär UDF ett FILE värde som , FileReföppnar bilden och returnerar sina dimensioner:

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 fler exempel på filbehandling av UDF, inklusive att generera filer med en UDTF, se Process files with UDF. För allmän UDF-författande, se Python skalar användardefinierade funktioner (UDF) och Python användardefinierade tabellfunktioner (UDTF).

Limitations

Att använda FileType i PySpark har följande begränsningar:

  • PySpark stöder inte deklaration FILE MANAGED eller FILE EXTERNAL tabellkolumner eller att ta in filer i bulk. Använd SQL för dessa operationer. PySpark stöder FILEendast , som FileType, i UDF:er och filläsningar.
  • as_local_file() och open() kräver klusteråtkomst, så de är inte tillgängliga på en Databricks Connect-klient . Kalla dem istället i en UDF eller på klusterberäkning.
  • För from_bytes och from_local_file, härleder content_type Python UDF från path extension, medan Scala UDF härleder det från filens magic bytes.
  • Att returnera a FileRef från en UDF som skriver till en FILE MANAGED kolumn stöds inte.