Используя pyspark, считывайте и записывайте 2D-изображения в файловой системе hadoop

Я хочу иметь возможность читать / записывать изображения в файловой системе hdfs и использовать преимущества местоположения hdfs.

У меня есть коллекция изображений, где каждое изображение состоит из

  • 2D массивы uint16
  • Основная дополнительная информация хранится в виде XML-файла.

Я хочу создать архив поверх файловой системы hdfs и использовать анализ для анализа архива. Сейчас я пытаюсь найти наилучший способ хранения данных в файловой системе hdfs, чтобы в полной мере воспользоваться структурой spark+hdfs.

Из того, что я понимаю, лучшим способом было бы создать оболочку sequenceFile. У меня есть два вопроса:

  • Является ли создание оболочки sequenceFile лучшим способом?
  • У кого-нибудь есть указатель на примеры, с которых я мог бы начать? Я не должен быть первым, кто должен читать что-то отличное от текстового файла на hdfs через spark!

1 ответ

Я нашел решение, которое работает: использование двоичного файла pyspark 1.2.0 делает свою работу. Он помечен как экспериментальный, но я смог прочитать tiff-изображения с правильной комбинацией openCV.

import cv2
import numpy as np

# build rdd and take one element for testing purpose
L = sc.binaryFiles('hdfs://localhost:9000/*.tif').take(1)

# convert to bytearray and then to np array
file_bytes = np.asarray(bytearray(L[0][1]), dtype=np.uint8)

# use opencv to decode the np bytes array 
R = cv2.imdecode(file_bytes,1)

Обратите внимание на помощь pyspark:

binaryFiles(path, minPartitions=None)

    :: Experimental

    Read a directory of binary files from HDFS, a local file system (available on all nodes), or any Hadoop-supported file system URI as a byte array. Each file is read as a single record and returned in a key-value pair, where the key is the path of each file, the value is the content of each file.

    Note: Small files are preferred, large file is also allowable, but may cause bad performance.
Другие вопросы по тегам