FileType

Область применения:check помечена да Databricks Runtime 18 LTS и выше

Important

Эта функция доступна в бета-версии. Администраторы рабочей области могут управлять доступом к этой функции на странице "Предварительные версии ". См. статью "Управление предварительными версиями Azure Databricks".

FileType — это тип PySpark для типа SQL FILE , ссылка на неструктурированный файл и его метаданные. Используйте его для объявления FILE параметров и возврата типов в пользовательских функциях (UDF) на Python. В Python значение FILE — это FileRef объект, который хранит метаданные файла и считывает его байты.

Для ссылки на SQL-тип и концептуального обзора см. FILE тип и тип FILE и неструктурированные данные. Для примеров UDF с обработкой файлов см. Файлы процессов с UDF.

Примечание.

Этот тип не поддерживается на ноутбуках FILE без сервера. Он поддерживается на ноутбуках, подключённых к серверным хранилищам Databricks SQL.

Import

from pyspark.sql.types import FileType, FileRef

FileType

FileType — это подкласс pyspark.sql.types.DataType. Используйте его как параметр или тип возврата в UDF, либо как тип поля в схеме.

FileType не уточняет MANAGED или EXTERNAL. Эти квалификаторы применимы только к столбцу FILE таблицы, где столбец определяет, хранится ли ссылка как управляемая или внешняя ссылка. UDF передаёт и возвращает FILE ссылки, а целевой столбец определяет, как хранится каждая ссылка при записи результата в таблицу.

Вы можете использовать FileType это следующим образом, которые также применимы к SQL и Scala UDF, а также к хранимым процедурам SQL:

  • Как типаж высшего уровня.
  • Вложено внутри a StructType или ArrayType.
  • Как тип значения , MapTypeно не как MapType ключ.
  • Внутри VariantType, но только для внешних файлов.

Когда запрос возвращает FILE столбец в Python, либо внутри UDF, либо через DataFrame.collect(), каждое значение имеет FileRef.

FileRef

A FileRef — это значение Python для FILE. Он хранит метаданные файла и имеет методы чтения байтов файла и создания новых ссылок.

Attributes

Атрибут Type Description
uri str URI файла. Всегда готово.
offset int Смещение в файл в байтах.
size int Размер файла в байтах.
content_type str Тип MIME файла, когда он известен.
checksum str Токен целостности для байтов файла вида <algorithm>:<digest>. Для распознанных алгоритмов см. Контрольные суммы.

Методы

Метод Description
as_local_file() Возвращает a pathlib.Path в файл. Передайте результат любой библиотеке, которая принимает путь. Доступно на Azure Databricks compute (notebooks и UDF-работники). Недоступно на клиенте Databricks Connect, например, в IDE или локальном приложении, которое запускает ваш код вне вычислительных систем Azure Databricks.
open() Открывает файл для бинарного чтения и возвращает объект файла. Звонящий закрывает его. Имеет те же требования к вычислениям, что и as_local_file().
from_bytes(content, path=None, content_type=None) Метод класса. Загружает content (значениеbytes) на путь тома Unity Catalog, заданный как path , и возвращает .FileRef Не работает, если файл уже существует на целевом пути. Поддерживается только внутри UDF.
from_local_file(local_file, path=None, content_type=None) Метод класса. Загружает локальный файл в том Unity Catalog и возвращает FileRef. Параметры path и content_type ведут себя как в from_bytes. Поддерживается только внутри UDF.

Example

В следующем коде скалярный UDF получает FILE значение как FileRef, открывает изображение и возвращает его размерности:

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

Для более численных примеров UDF с обработкой файлов, включая генерацию файлов с помощью UDTF, см. раздел Process files with UDF. Для общего авторства UDF см. Python скалярные пользовательские функции (UDF) и Python пользовательские табличные функции (UDTF).

Ограничения

Использование FileType в PySpark имеет следующие ограничения:

  • PySpark не поддерживает объявление FILE MANAGED , FILE EXTERNAL таблицу столбцов или массовое погружение файлов. Используйте SQL для этих операций. PySpark поддерживает FILEтолько , как FileType, в UDF и чтении файлов.
  • as_local_file() и open() требуют доступа на стороне кластера, поэтому они недоступны на клиенте Databricks Connect . Вызывайте их в UDF или на кластерных вычислениях.
  • Для from_bytes и from_local_file, Python UDF выводят content_type из расширения пути, тогда как UDF Scala выводят его из магических байтов файла.
  • Возврат FileRef a из UDF, который записывает в FILE MANAGED колонку, не поддерживается.