Изображения
Внимание
Для загрузки данных изображения в Кадр данных Spark в виде необработанных байтов, в Databricks рекомендуется указать источник данных как двоичный файл. Рекомендуемый рабочий процесс для обработки данных изображения см. в разделе Эталонное решение для приложений, работающих с изображениями.
Источник данных изображения абстрагируется от деталей представления изображения и предоставляет стандартный API для загрузки данных изображения. Для чтения файлов изображений укажите источник данных format
как image
.
df = spark.read.format("image").load("<path-to-image-data>")
Аналогичные API существуют для Scala, Java и R.
Можно импортировать вложенную структуру каталогов (например, использовать путь вида /path/to/dir/
), а также можно использовать обнаружение секций, указав путь к каталогу секции (то есть путь вида /path/to/dir/date=2018-01-02/category=automobile
).
Структура изображения
Файлы изображений загружаются как кадры данных, содержащие один столбец типа struct с именем image
со следующими полями:
image: struct containing all the image data
|-- origin: string representing the source URI
|-- height: integer, image height in pixels
|-- width: integer, image width in pixels
|-- nChannels
|-- mode
|-- data
где находятся поля:
nChannels
: количество цветовых каналов. Типичные значения: 1 для изображений в оттенках серого, 3 для цветных изображений (например, RGB) и 4 для цветных изображений с альфа-каналом.mode
: целочисленный флаг, указывающий способ интерпретации поля данных. Он указывает тип данных и порядок каналов, в которых хранятся данные. Значение поля является ожидаемым (но не применяется) для соотнесения с одним из типов OpenCV, показанных в следующей таблице. Типы OpenCV определены для каналов 1, 2, 3 или 4, а также нескольких типов данных для значений пикселов. Порядок каналов задает порядок, в котором хранятся цвета. Например, если у вас есть типичное трехканальное изображение с красными, синими и зелеными компонентами, существует шесть возможных порядков. Большинство библиотек используют либо RGB, либо BGR. Ожидается, что три (четыре) канала типа OpenCV будут представлены в порядке BGR (A).Сопоставьте тип с числами в OpenCV (типы данных x число каналов)
Тип C1 C2 C3 C4 CV_8U 0 8 16 24 CV_8S 1 9 17 25 CV_16U 2 10 18 26 CV_16S 3 11 19 27 CV_32U 4 12 20 28 CV_32S 5 13 21 29 CV_64F 6 14 22 30 data
: данные изображения, хранящиеся в двоичном формате. Данные изображения представлены в виде трехмерного массива с формой измерения (высота, ширина, nChannels) и значениями массива типа t, указанными в поле режима. Массив хранится в построчном порядке.
Отображение данных изображения
Функция Databricks display
поддерживает отображение данных изображения. См. Изображения.
Пример записной книжки: чтение и запись данных в файлы изображений
В следующей записной книжке показано, как считывать и записывать данные в файлы изображений.
Записная книжка источника данных изображения
Ограничения для источника данных изображения
Источник данных изображения декодирует файлы изображений во время создания Кадра данных Spark, увеличивает размер данных и вводит ограничения в следующих сценариях.
- Сохранение кадра данных: если для упрощения доступа нужно необходимо сохранить кадр данных в Разностной таблице, вместо декодированных данных следует сохранить необработанные байты, чтобы сэкономить место на диске.
- Перетасовывание секций: перетасовывание данных декодированного изображения требует больше места на диске и пропускной способности сети, что приводит к замедлению перетасовывания. Следует максимально отложить декодирование изображения.
- Выбор другого метода декодирования: источник данных изображения использует библиотеку ввода-вывода изображений javax для декодирования изображения, что не позволяет выбирать другие библиотеки декодирования изображений для повышения производительности или реализации настраиваемой логики декодирования.
Этих ограничений можно избежать, используя в качестве источника данных двоичный файл для загрузки данных изображения и декодирования только по мере необходимости.