FileType

Aplica-se a:sim assinalado Databricks Runtime 18 LTS e superiores

Importante

Este recurso está em versão Beta. Os administradores do espaço de trabalho podem controlar o acesso a esse recurso na página Visualizações . Ver Gerir as pré-visualizações de Azure Databricks.

FileType é o tipo PySpark para o tipo SQL FILE , uma referência a um ficheiro não estruturado e aos seus metadados. Use-o para declarar FILE parâmetros e tipos de retorno em funções definidas pelo utilizador (UDFs) em Python. Em Python, um FILE valor é um FileRef objeto que contém os metadados do ficheiro e lê os seus bytes.

Para a referência de tipos SQL e visão conceptual, vejaFILE type e FILE type e dados não estruturados. Para exemplos de UDF em processamento de ficheiros, veja Processos de ficheiros com UDFs.

Observação

Este FILE tipo não é suportado em notebooks serverless. É suportado em notebooks ligados a databricks SQL warehouses serverless.

Import

from pyspark.sql.types import FileType, FileRef

FileType

FileType é uma subclasse de pyspark.sql.types.DataType. Use-o como parâmetro ou tipo de retorno de um UDF, ou como tipo de campo num esquema.

FileType não especifica MANAGED nem EXTERNAL. Esses qualificadores aplicam-se apenas a uma FILE coluna de tabela, onde a coluna determina se uma referência é armazenada como gerida ou externa. Um UDF passa e devolve FILE referências, e a coluna alvo decide como cada referência é armazenada quando se escreve o resultado numa tabela.

Pode usar FileType das seguintes formas, que também se aplicam a UDFs SQL e Scala e a procedimentos armazenados SQL:

  • Como um tipo de topo.
  • Aninhado dentro de um StructType ou um ArrayType.
  • Como o tipo de valor de um MapType, mas não como uma MapType chave.
  • Dentro de um VariantType, mas apenas para ficheiros externos.

Quando uma consulta devolve uma FILE coluna para Python, seja dentro de um UDF ou através DataFrame.collect()de , cada valor é um FileRef.

FileRef

A FileRef é o valor Python para um FILE. Contém os metadados do ficheiro e tem métodos para ler os bytes do ficheiro e criar novas referências.

Attributes

Attribute Tipo Description
uri str O URI do ficheiro. Sempre pronto.
offset int Um deslocamento para o ficheiro, em bytes.
size int O tamanho do arquivo em bytes.
content_type str O tipo MIME do ficheiro, quando conhecido.
checksum str Um token de integridade para os bytes do ficheiro, da forma <algorithm>:<digest>. Para os algoritmos reconhecidos, veja Somas de Controlo.

Methods

Método Description
as_local_file() Devolve a pathlib.Path ao ficheiro. Passe o resultado a qualquer biblioteca que aceite um caminho. Disponível no Azure Databricks compute (notebooks e trabalhadores UDF). Não está disponível num cliente Databricks Connect, como um IDE ou aplicação local que execute o seu código fora do computo do Azure Databricks.
open() Abre o ficheiro para leitura binária e devolve um objeto de ficheiro. O interlocutor encerra-o. Tem o mesmo requisito de computação que as_local_file().
from_bytes(content, path=None, content_type=None) Método de classe. Carrega content (um bytes valor) para o caminho de volume do Unity Catalog dado por path e retorna um FileRef. Falha se um ficheiro já existir no caminho de destino. Suportado apenas dentro de um UDF.
from_local_file(local_file, path=None, content_type=None) Método de classe. Carrega um ficheiro local para um volume do Unity Catalog e retorna um FileRefarquivo . Os path parâmetros e content_type comportam-se como em from_bytes. Suportado apenas dentro de um UDF.

Example

No código seguinte, uma UDF escalar recebe um FILE valor como FileRef, abre a imagem e devolve as suas dimensões:

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

Para mais exemplos de UDF em processamento de ficheiros, incluindo a geração de ficheiros com um UDTF, veja Processos de ficheiros com UDFs. Para a autoria geral de UDF, veja funções escalares definidas pelo utilizador (UDFs) em Python e funções de tabela definidas pelo utilizador em Python (UDTFs).

Limitações

O uso FileType no PySpark tem as seguintes limitações:

  • O PySpark não suporta declarações FILE MANAGED ou FILE EXTERNAL colunas de tabelas, nem a ingestão de ficheiros em massa. Usa SQL para essas operações. O PySpark só suporta FILE, como FileType, em UDFs e leituras de ficheiros.
  • as_local_file() e open() requerem acesso do lado do cluster, pelo que não estão disponíveis num cliente Databricks Connect . Chama-os num UDF ou em computação em cluster.
  • Para from_bytes e from_local_file, os UDFs de Python inferem content_type a partir da extensão de caminho, enquanto os UDFs de Scala inferem a partir dos bytes mágicos do ficheiro.
  • Devolver a FileRef de um UDF que escreve numa FILE MANAGED coluna não é suportado.