Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:
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 выводят его из магических байтов файла. - Возврат
FileRefa из UDF, который записывает вFILE MANAGEDколонку, не поддерживается.