使用pyspark,在hadoop文件系统上读/写2d图像

f3temu5u  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(354)

我希望能够在hdfs文件系统上读/写图像,并利用hdfs的局部性。
我有一个图像的集合,其中每个图像是由
uint16的二维阵列
作为xml文件存储的基本附加信息。
我想在hdfs文件系统上创建一个归档文件,并使用spark分析归档文件。现在我正在努力寻找通过hdfs文件系统存储数据的最佳方法,以便能够充分利用spark+hdfs结构。
据我所知,最好的方法是创建一个sequencefile Package 器。我有两个问题:
创建sequencefile Package 器是最好的方法吗?
有没有人能给我一些例子作为开始?我一定不是第一个需要通过spark读取不同于hdfs上的文本文件的人!

fhity93d

fhity93d1#

我找到了一个可行的解决方案:使用pyspark 1.2.0二进制文件就可以了。它被标记为实验性的,但是我能够通过opencv的适当组合来读取tiff图像。

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.

相关问题