2015-02-25 12 views
7

Tôi muốn có thể đọc/ghi hình ảnh trên hệ thống tệp hdfs và tận dụng lợi thế của địa phương hdfs.sử dụng pyspark, đọc/ghi hình ảnh 2D trên hệ thống tệp hadoop

Tôi có một bộ sưu tập các hình ảnh trong đó mỗi ảnh gồm

  • mảng 2D của uint16
  • thông tin bổ sung cơ bản lưu trữ dưới dạng file xml.

Tôi muốn tạo lưu trữ trên hệ thống tệp hdfs và sử dụng tia lửa để phân tích lưu trữ. Ngay bây giờ tôi đang đấu tranh trên cách tốt nhất để lưu trữ dữ liệu trên hệ thống tập tin hdfs để có thể tận dụng tối đa cấu trúc tia lửa + hdfs.

Từ những gì tôi hiểu, cách tốt nhất là tạo trình bao bọc sequenceFile. Tôi có hai câu hỏi:

  • Tạo trình tự wrapperFile là cách tốt nhất?
  • Có ai có bất kỳ con trỏ nào đến các ví dụ mà tôi có thể sử dụng để bắt đầu không? Tôi không phải là người đầu tiên cần phải đọc một cái gì đó khác với tập tin văn bản trên hdfs thông qua tia lửa!

Trả lời

7

Tôi đã tìm thấy giải pháp hoạt động: sử dụng tệp nhị phân pyspark 1.2.0 thực hiện công việc. Nó được gắn cờ là thử nghiệm, nhưng tôi đã có thể đọc hình ảnh tiff với một sự kết hợp thích hợp của 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) 

Lưu ý sự giúp đỡ của 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

Cảm ơn - đây là thú vị. Chỉ cần tò mò để biết nếu bạn đã sử dụng tia lửa cho phân tích tập tin tiff, quá? Tôi đang làm việc với các tập tin tiff lớn (~ 800MB) và muốn tạo ra một pyspark RDD từ mảng numpy, nhưng không chắc chắn làm thế nào để đi về nó. – user3591836

+0

Từ các thử nghiệm của tôi, sẽ dễ dàng hơn nhiều nếu tôi chuẩn bị dữ liệu chính xác: Tôi chuyển đổi tệp hình ảnh thành các tệp "avro" có chứa các lát hình ảnh chồng lên nhau. Tôi phải đối phó với những hình ảnh rất lớn (400 Mpixels) và đó là giải pháp tốt nhất cho tôi. – MathiasOrtner

+0

tuyệt vời, cảm ơn mẹo! – user3591836

Các vấn đề liên quan