FileType

Platí pro:check označeno ano Databricks Runtime 18 LTS a vyšší

Important

Tato funkce je v beta verzi. Správci pracovního prostoru můžou řídit přístup k této funkci ze stránky Previews . Viz Manage Azure Databricks preview.

FileType je typ PySpark pro typ SQL FILE , odkaz na nestrukturovaný soubor a jeho metadata. Použijte ho k deklaraci FILE parametrů a typů návratů v Python uživatelsky definovaných funkcích (UDF). V Python FILE je FileRef hodnota objekt, který uchovává metadata souboru a čte jeho bajty.

Pro SQL typ reference a konceptuální přehled viz FILE typ a SOUBOR a nestrukturovaná data. Pro příklady UDF pro zpracování souborů viz Process files with UDF.

Note

Tento FILE typ není podporován na serverless noteboích. Je podporován na noteboích připojených k serverless Databricks SQL skladům.

Import

from pyspark.sql.types import FileType, FileRef

FileType

FileType je podtřídou třídy pyspark.sql.types.DataType. Použijte ho jako parametr nebo typ návratu v UDF, nebo jako typ pole ve schématu.

FileType nespecifikuje MANAGED ani EXTERNAL. Tyto kvalifikátory se vztahují pouze na sloupec FILE tabulky, kde sloupec určuje, zda je odkaz uložen jako spravovaný nebo externí. UDF předává a vrací FILE odkazy a cílový sloupec rozhoduje, jak je každá reference uložena, když zapisujete výsledek do tabulky.

Můžete použít FileType následující způsoby, které platí také pro SQL a Scala UDF a pro SQL uložené procedury:

  • Jako typ nejvyšší úrovně.
  • Vnořený do nebo StructTypeArrayType.
  • Jako hodnotový typ , MapTypeale ne jako klíč.MapType
  • Uvnitř , VariantTypeale pouze pro externí soubory.

Když dotaz vrátí sloupec FILE do Python, buď uvnitř UDF, nebo skrze DataFrame.collect(), každá hodnota je .FileRef

FileRef

A FileRef je Python hodnota pro .FILE Uchovává metadata souboru a má metody pro čtení bajtů souboru a vytváření nových referencí.

Atributy

Attribute Typ Description
uri str URI souboru. Vždy připravené.
offset int Offset do souboru v bajtech.
size int Velikost souboru v bajtech
content_type str MIME typ souboru, pokud je znám.
checksum str Integritní token pro bajty souboru ve tvaru <algorithm>:<digest>. Pro rozpoznané algoritmy viz Kontrolní součty.

Methods

Metoda Description
as_local_file() Vrátí a pathlib.Path do souboru. Výsledek předejte jakékoli knihovně, která přijímá cestu. Dostupné na Azure Databricks compute (notebooks a UDF workers). Není dostupné na klientovi Databricks Connect, jako je IDE nebo lokální aplikace, která spouští váš kód mimo výpočetní kapacitu Azure Databricks.
open() Otevře soubor pro binární čtení a vrátí objekt souboru. Volající ho zavře. Má stejný výpočetní požadavek jako as_local_file().
from_bytes(content, path=None, content_type=None) Třídní metoda. Nahraje content (hodnotubytes) do cesty svazku Unity Catalog dané a path vrací .FileRef Selže, pokud soubor již existuje na cílové cestě. Podporováno pouze uvnitř UDF.
from_local_file(local_file, path=None, content_type=None) Třídní metoda. Nahraje lokální soubor do svazku Unity Catalog a vrátí .FileRef Parametry path a content_type se chovají jako v from_bytes. Podporováno pouze uvnitř UDF.

Example

V následujícím kódu skalární UDF přijímá FILE hodnotu , FileRefotevírá obraz a vrací jeho rozměry:

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()

Pro další příklady zpracování souborů UDF, včetně generování souborů pomocí UDTF, viz Process files with UDF. Pro obecné UDF authoring viz Python skalární uživatelsky definované funkce (UDF) a Python uživatelsky definované tabulkové funkce (UDTF).

Limitations

Použití FileType v PySparku má následující omezení:

  • PySpark nepodporuje deklarování FILE MANAGEDFILE EXTERNAL sloupců tabulky ani hromadné ingestování souborů. Pro tyto operace používejte SQL. PySpark podporuje FILEpouze , protože FileType, v UDF a čtení souborů.
  • as_local_file() a open() vyžadují přístup na straně clusteru, takže nejsou dostupné na klientovi Databricks Connect . Místo toho je volejte v UDF nebo na clusterovém výpočtu.
  • Pro from_bytes a from_local_file, Python UDF odvozují content_type z rozšíření cesty, zatímco Scala UDF jej odvozují z magických bajtů souboru.
  • Vrácení a FileRef z UDF, který zapisuje do sloupce FILE MANAGED , není podporováno.