Двоичный файл

Databricks Runtime поддерживает источник данных двоичного файла, который считывает двоичные файлы и преобразует каждый файл в отдельную запись с необработанным содержимым и метаданными файла. Источник данных двоичного файла создает кадр данных со следующими столбцами и, возможно, столбцами секции:

  • path (StringType): путь к файлу.
  • modificationTime (TimestampType): время изменения файла. В некоторых реализациях файловой системы Hadoop этот параметр может быть недоступен, и будет задано значение по умолчанию.
  • length (LongType): длина файла в байтах.
  • content (BinaryType): содержимое файла.

Для чтения двоичных файлов укажите источник данных format как binaryFile.

изображения;

Databricks рекомендует использовать источник данных двоичного файла для отправки данных изображений

Функция Databricks display поддерживает отображение данных изображения, загруженных с помощью двоичного источника данных.

Если все загруженные файлы имеют имя файла с расширением image, то предварительный просмотр изображения включается автоматически.

df = spark.read.format("binaryFile").load("<path-to-image-dir>")
display(df)    # image thumbnails are rendered in the "content" column

image preview

Кроме того, можно принудительно применить функцию предварительного просмотра изображений с помощью параметра mimeType со строковым значением "image/*", чтобы добавить аннотацию для двоичного столбца. Изображения декодируются с учетом сведений о формате в двоичном содержимом. Поддерживаются следующие типы изображений: bmp, gif, jpeg и png. Неподдерживаемые файлы отображаются в виде значка поврежденного изображения.

df = spark.read.format("binaryFile").option("mimeType", "image/*").load("<path-to-dir>")
display(df)    # unsupported files are displayed as a broken image icon

image preview with unsupported file type

Рекомендуемый рабочий процесс для обработки данных изображения см. в разделе Эталонное решение для приложений, работающих с изображениями.

Параметры

Чтобы загрузить файлы с путями, соответствующими заданной стандартной маске, сохраняя при этом поведение обнаружения секций, можно использовать параметр pathGlobFilter. Следующий код считывает все JPG-файлы из входного каталога с обнаружением секций:

df = spark.read.format("binaryFile").option("pathGlobFilter", "*.jpg").load("<path-to-dir>")

Чтобы игнорировать обнаружение секций и выполнять рекурсивный поиск файлов во входном каталоге, используйте параметр recursiveFileLookup. Этот параметр выполняет поиск во вложенных каталогах, даже если их имена не соответствуют схеме именования секций, например date=2019-07-01. Следующий код рекурсивно считывает все JPG-файлы из входного каталога и игнорирует обнаружение секций:

df = spark.read.format("binaryFile") \
  .option("pathGlobFilter", "*.jpg") \
  .option("recursiveFileLookup", "true") \
  .load("<path-to-dir>")

Аналогичные API существуют для Scala, Java и R.

Примечание.

Чтобы повысить производительность чтения при обратной загрузке данных, Azure Databricks рекомендует отключить сжатие при сохранении данных, загруженных из двоичных файлов:

spark.conf.set("spark.sql.parquet.compression.codec", "uncompressed")
df.write.format("delta").save("<path-to-table>")