2015-02-25 8 views
7

Desidero essere in grado di leggere/scrivere immagini su un file system hdfs e sfruttare la località hdfs.utilizzando pyspark, lettura/scrittura di immagini 2D su file system hadoop

Ho una collezione di immagini in cui ogni immagine è composta da

  • matrici 2D di uint16
  • di base ulteriori informazioni memorizzate in un file XML.

Voglio creare un archivio sul file system hdfs e utilizzare spark per analizzare l'archivio. In questo momento sto lottando sul modo migliore per archiviare i dati sul file system hdfs al fine di poter sfruttare appieno la struttura di spark + hdfs.

Da quello che ho capito, il modo migliore sarebbe quello di creare un wrapper sequenzaFile. Ho due domande:

  • La creazione di un wrapper SequenceFile è la migliore?
  • Qualcuno ha un puntatore agli esempi che potrei usare per iniziare? Non devo essere il primo a dover leggere qualcosa di diverso dal file di testo su hdfs tramite spark!

risposta

7

Ho trovato una soluzione che funziona: utilizzare il file binary pyspark 1.2.0 fa il lavoro. È contrassegnato come sperimentale, ma sono stato in grado di leggere le immagini tiff con una combinazione corretta di 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) 

nota l'aiuto di 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

Grazie - questo è interessante. Sei curioso di sapere se hai usato anche la scintilla per l'analisi dei file TIFF? Sto lavorando con file tiff di grandi dimensioni (~ 800 MB) e vorrei creare un RDD pyspark dall'array numpy, ma non sono sicuro di come farlo. – user3591836

+0

Dai miei esperimenti, è molto più semplice se preparo i dati correttamente: trasformo i file di immagine in file "avro" che contengono immagini sovrapposte. Devo occuparmi di immagini molto grandi (400 Mpixel) ed è la soluzione migliore per me. – MathiasOrtner

+0

fantastico, grazie per il suggerimento! – user3591836

Problemi correlati