2015-02-25 4 views
7

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

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

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

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

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

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

ответ

7

Я нашел решение, которое работает: используя файл pyspark 1.2.0 binaryfile выполняет эту работу. Он помечен как экспериментальный, но я смог прочитать 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. 
+0

Спасибо - это интересно. Просто любопытно узнать, использовали ли вы искру для анализа файлов TIFF? Я работаю с большими (~ 800 МБ) tiff-файлами и хотел бы создать pyspark RDD из массива numpy, но не уверен, как это сделать. – user3591836

+0

Из моих экспериментов намного легче, если я правильно подготовлю данные: я преобразую файлы изображений в файлы «avro», которые содержат перекрывающиеся фрагменты изображений. Мне приходится иметь дело с очень большими изображениями (400 Мпикселей), и это лучшее решение для меня. – MathiasOrtner

+0

отлично, спасибо за подсказку! – user3591836

Смежные вопросы