Tipo di file

Si applica a:check contrassegnato con sì Databricks Runtime 18 LTS e versioni successive

Importante

Questa funzionalità è in versione beta. Gli amministratori dell'area di lavoro possono controllare l'accesso a questa funzionalità dalla pagina Anteprime . Vedere Gestire le anteprime di Azure Databricks.

FileType è il tipo PySpark per il tipo SQL FILE , un riferimento a un file non strutturato e ai suoi metadati. Usalo per dichiarare FILE parametri e tipi di ritorno nelle funzioni definite dall'utente (UDF) in Python. In Python, un FILE valore è un FileRef oggetto che contiene i metadati del file e ne legge i byte.

Per il riferimento al tipo SQL e la panoramica concettuale, vedi FILE type e FILE type e dati non strutturati. Per esempi di UDF per l'elaborazione file, vedi File di processo con UDF.

Nota

Questo FILE tipo non è supportato sui notebook serverless. È supportata su notebook collegati a serverless Databricks SQL warehouse.

Import

from pyspark.sql.types import FileType, FileRef

Tipo di file

FileType è una sottoclasse di pyspark.sql.types.DataType. Usalo come parametro o tipo di ritorno di una UDF, o come tipo di campo in uno schema.

FileType non specifica MANAGEDEXTERNAL. Questi qualificatori si applicano solo a una FILE colonna della tabella, dove la colonna determina se un riferimento è memorizzato come gestito o esterno. Un UDF passa e restituisce FILE riferimenti, e la colonna di destinazione decide come ogni riferimento viene memorizzato quando scrivi il risultato su una tabella.

Puoi utilizzare FileType i seguenti modi, che si applicano anche a SQL e Scala UDF e alle stored procedure SQL:

  • Come tipo di alto livello.
  • Annidati all'interno di un StructType o un ArrayType.
  • Come valore di tipo , MapTypema non come MapType chiave.
  • All'interno di un VariantType, ma solo per file esterni.

Quando una query restituisce una FILE colonna in Python, sia all'interno di un UDF che attraverso DataFrame.collect(), ogni valore è un FileRef.

FileRef

A FileRef è il valore Python per un FILE. Contiene i metadati del file e dispone di metodi per leggere i byte del file e creare nuovi riferimenti.

Attributi

Attribute Type Description
uri str L'URI del file. Sempre pronto.
offset int Un offset nel file, in byte.
size int Le dimensioni del file in byte.
content_type str Il tipo MIME del file, quando noto.
checksum str Un token di integrità per i byte del file, della forma <algorithm>:<digest>. Per gli algoritmi riconosciuti, vedi Checksum.

Methods

metodo Description
as_local_file() Ritorna pathlib.Path al file. Passa il risultato a qualsiasi libreria che accetti un percorso. Disponibile su Azure Databricks compute (notebooks e UDF workers). Non disponibile su un client Databricks Connect, come un IDE o un'applicazione locale che esegue il tuo codice al di fuori di Azure Databricks.
open() Apre il file per la lettura binaria e restituisce un oggetto file. Il chiamante chiude la telefonata. Ha lo stesso requisito di calcolo di as_local_file().
from_bytes(content, path=None, content_type=None) Metodo di classe. Carica content (un bytes valore) nel percorso del volume del Catalogo Unity dato da path e restituisce un FileRef. Fallisce se un file esiste già sul percorso di destinazione. Supportato solo all'interno di un UDF.
from_local_file(local_file, path=None, content_type=None) Metodo di classe. Carica un file locale in un volume del Catalogo Unity e restituisce un FileReffile . I path parametri e content_type si comportano come in from_bytes. Supportato solo all'interno di un UDF.

Example

Nel codice seguente, un UDF scalare riceve un FILE valore come FileRef, apre l'immagine e restituisce le sue dimensioni:

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

Per altri esempi di UDF di elaborazione file, inclusa la generazione di file con un UDTF, vedi File di elaborazione con UDF. Per la creazione generale di UDF, vedi Python funzioni scalari definite dall'utente (UDF) e funzioni di tabella definite dall'utente in Python (UDTF).

Limitazioni

L'utilizzo FileType in PySpark presenta le seguenti limitazioni:

  • PySpark non supporta dichiarazioni FILE MANAGED o FILE EXTERNAL colonne di tabella o l'ingestimento di file in massa. Usa SQL per queste operazioni. PySpark supporta FILEsolo , come FileType, in UDF e letture di file.
  • as_local_file() e open() richiedono l'accesso lato cluster, quindi non sono disponibili su un client Databricks Connect . Chiamali invece in un UDF o su un cluster compute.
  • Per from_bytes e from_local_file, le UDF di Python inferiscono content_type dall'estensione di percorso, mentre le UDF di Scala lo infergono dai magic byte del file.
  • Non è supportato restituire a FileRef da un UDF che scrive in una FILE MANAGED colonna.