FileType

Se aplica a:check marcado yes Databricks Runtime 18 LTS y versiones posteriores

Importante

Esta característica se encuentra en su versión beta. Los administradores del área de trabajo pueden controlar el acceso a esta característica desde la página Vistas previas . Consulte Administrar versiones preliminares de Azure Databricks.

FileType es el tipo PySpark para el tipo SQL FILE , una referencia a un archivo no estructurado y sus metadatos. Úsalo para declarar FILE parámetros y tipos de retorno en funciones definidas por el usuario (UDFs) de Python. En Python, un FILE valor es un FileRef objeto que contiene los metadatos del archivo y lee sus bytes.

Para la referencia de tipos SQL y la visión general conceptual, véaseFILE tipo y tipo ARCHIVO y datos no estructurados. Para ejemplos de UDF en procesamiento de archivos, véase Archivos de proceso con UDFs.

Nota:

Este FILE tipo no está soportado en portátiles serverless. Está soportado en cuadernos conectados a almacenes SQL de Databricks sin servidor.

Import

from pyspark.sql.types import FileType, FileRef

FileType

El objeto FileType es una subclase de pyspark.sql.types.DataType. Úsalo como parámetro o tipo de retorno de una UDF, o como tipo de campo en un esquema.

FileType no especifica MANAGED ni EXTERNAL. Estos calificativos solo se aplican a una FILE columna de tabla, donde la columna determina si una referencia se almacena como gestionada o externa. Una UDF pasa y devuelve FILE referencias, y la columna de destino decide cómo se almacena cada referencia cuando escribes el resultado en una tabla.

Puedes usarlos FileType de las siguientes maneras, que también se aplican a los UDF de SQL y Scala y a los procedimientos almacenados de SQL:

  • Como tipo de primer nivel.
  • Anidado dentro de un StructType o un ArrayType.
  • Como el tipo de valor de un MapType, pero no como clave MapType .
  • Dentro de un VariantType, pero solo para archivos externos.

Cuando una consulta devuelve una FILE columna a Python, ya sea dentro de un UDF o a través DataFrame.collect()de , cada valor es un FileRef.

FileRef

A FileRef es el valor de Python para un FILE. Contiene los metadatos del archivo y tiene métodos para leer los bytes del archivo y crear nuevas referencias.

Attributes

Attribute Tipo Descripción
uri str El URI del archivo. Siempre en posición.
offset int Un desplazamiento hacia el archivo, en bytes.
size int Tamaño de archivo en bytes.
content_type str El tipo MIME del archivo, cuando se conoce.
checksum str Un token de integridad para los bytes del archivo, de la forma <algorithm>:<digest>. Para los algoritmos reconocidos, véase Sumas de comprobación.

Methods

Método Descripción
as_local_file() Vuelve pathlib.Path a al archivo. Pasa el resultado a cualquier biblioteca que acepte un camino. Disponible en Azure Databricks compute (notebooks y UDF workers). No está disponible en un cliente Databricks Connect, como un IDE o una aplicación local que ejecute tu código fuera del cómputo de Azure Databricks.
open() Abre el archivo para lectura binaria y devuelve un objeto archivo. El que llama la cierra. Tiene el mismo requisito de cálculo que as_local_file().
from_bytes(content, path=None, content_type=None) Método de clase. Sube content (un bytes valor) al camino de volumen del Catálogo de Unity dado por path y devuelve un FileRefarchivo . Falla si un archivo ya existe en la ruta de destino. Solo soportado dentro de un UDF.
from_local_file(local_file, path=None, content_type=None) Método de clase. Sube un archivo local a un volumen del Catálogo de Unity y devuelve un FileRefarchivo . Los path parámetros y content_type se comportan como en from_bytes. Solo soportado dentro de un UDF.

Example

En el siguiente código, una UDF escalar recibe un FILE valor como FileRef, abre la imagen y devuelve sus dimensiones:

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 más ejemplos de procesamiento de archivos con UDF, incluyendo la generación de archivos con un UDTF, véase Archivos de proceso con UDF. Para la creación general de UDF, véanse funciones escalares definidas por el usuario (UDFs) en Python y funciones de tabla definidas por el usuario (UDTFs) en Python.

Limitations

El uso FileType de PySpark tiene las siguientes limitaciones:

  • PySpark no soporta declaraciones FILE MANAGED ni FILE EXTERNAL tablas de columnas ni ingesta de archivos en bloque. Usa SQL para esas operaciones. PySpark solo soporta FILE, como FileType, en UDFs y lecturas de archivos.
  • as_local_file() y open() requieren acceso en el clúster, por lo que no están disponibles en un cliente Databricks Connect . Llámalos en un UDF o en un clúster en su lugar.
  • Para from_bytes y from_local_file, los UDFs de Python inferen content_type a partir de la extensión de camino, mientras que los UDFs de Scala lo inferen a partir de los bytes mágicos del archivo.
  • No se soporta devolver a FileRef desde un UDF que escribe en una FILE MANAGED columna.