Tipo de Arquivo
Aplica-se a: Databricks Runtime 18 LTS e acima
Beta
Este recurso está em Beta. Os administradores do Workspace podem controlar o acesso a este recurso na página Pré-visualizações . Consulte Gerenciar prévias do Databricks.
FileType é o tipo PySpark para o tipo SQL FILE, uma referência a um arquivo não estruturado e seus metadados. Use-o para declarar parâmetros FILE e tipos de retorno em funções definidas pelo usuário (UDFs) do Python. Em Python, um valor FILE é um objeto FileRef, que mantém os metadados do arquivo e lê seus bytes.
Para a referência de tipo SQL e visão geral conceitual, consulte tipoFILE e tipo FILE e dados não estruturados. Para exemplos de UDF de processamento de arquivos, consulte Processar arquivos com UDFs.
O tipo FILE não é compatível com notebooks serverless. É compatível com Notebooks anexados a Databricks SQL Serverless warehouse.
Importar
from pyspark.sql.types import FileType, FileRef
Tipo de Arquivo
FileType é uma subclasse de pyspark.sql.types.DataType. Utilize-o como o tipo de parâmetro ou de retorno de um UDF, ou como um tipo de campo em um esquema.
FileType não especifica MANAGED ou EXTERNAL. Esses qualificadores se aplicam apenas a uma coluna de tabela FILE, em que a coluna determina se uma referência é armazenada como gerenciada ou externa. Um UDF transmite e retorna referências FILE, e a coluna de destino decide como cada referência é armazenada ao gravar o resultado em uma tabela.
Você pode usar FileType das seguintes maneiras, que também se aplicam a UDFs SQL e Scala e a procedimentos armazenados SQL:
- Como um tipo de nível superior.
- Aninhado dentro de um
StructTypeou de umArrayType. - Como o tipo de valor de um
MapType, mas não como uma keyMapType. - Dentro de um
VariantType, mas apenas para arquivos externos.
Quando uma query retorna uma coluna FILE para Python, seja dentro de um UDF ou por meio de DataFrame.collect(), cada valor é um FileRef.
FileRef
Um(a) FileRef é o valor Python para um(a) FILE. Ele mantém os metadados do arquivo e possui métodos para ler os bytes do arquivo e criar novas referências.
Atributos
Atributo | Tipo | Descrição |
|---|---|---|
|
| O URI do arquivo. Sempre definido. |
|
| Um offset no arquivo, em bytes. |
|
| O tamanho do arquivo em bytes. |
|
| O tipo MIME do arquivo, quando conhecido. |
|
| Um token de integridade para os bytes do arquivo, no formato |
Métodos
Método | Descrição |
|---|---|
| Retorna um |
| Abre o arquivo para leitura binária e retorna um objeto de arquivo. O chamador o fecha. Tem o mesmo requisito de compute que |
| Método de classe. Faz upload de |
| Método de classe. Faz upload de um arquivo local para um volume do Unity Catalog e retorna um |
Exemplo
No código a seguir, uma UDF escalar recebe um valor FILE como um FileRef, abre a imagem e retorna 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 de processamento de arquivos, incluindo a geração de arquivos com uma UDTF, consulte Processar arquivos com UDFs. Para a criação geral de UDF, consulte Funções escalares definidas pelo usuário (UDF) em Python e Funções de tabela definidas pelo usuário (UDF) em Python.
Limitações
O uso de FileType no PySpark tem as seguintes limitações:
- O PySpark não oferece suporte à declaração de colunas de tabela
FILE MANAGEDouFILE EXTERNALnem à ingestão de arquivos em massa. Use SQL para essas operações. O PySpark oferece suporte apenas aFILE, comoFileType, em UDFs e leituras de arquivo. as_local_file()eopen()exigem acesso no lado do cluster, portanto, não estão disponíveis em um cliente Databricks Connect. Em vez disso, chame-os em um UDF ou no compute de cluster.- Para
from_bytesefrom_local_file, as UDFs Python inferemcontent_typea partir da extensão do caminho, enquanto as UDFs Scala a inferem a partir dos magic bytes do arquivo. - Não há suporte para retornar um
FileRefde uma UDF que grava em uma colunaFILE MANAGED.