使用 pyspark,在 h​​adoop 文件系统上读/写 2D 图像

Posted

技术标签:

【中文标题】使用 pyspark,在 h​​adoop 文件系统上读/写 2D 图像【英文标题】:using pyspark, read/write 2D images on hadoop file system 【发布时间】:2015-02-25 22:46:48 【问题描述】:

我希望能够在 hdfs 文件系统上读取/写入图像并利用 hdfs 的位置。

我有一组图像,其中每个图像由

uint16 的二维数组 以 xml 文件形式存储的基本附加信息。

我想通过 hdfs 文件系统创建一个存档,并使用 spark 来分析存档。现在,我正在努力寻找通过 hdfs 文件系统存储数据的最佳方式,以便能够充分利用 spark+hdfs 结构。

据我了解,最好的方法是创建一个 sequenceFile 包装器。我有两个问题:

创建 sequenceFile 包装器是最好的方法吗? 有没有人有任何指向我可以用来开始的示例的指针?我一定不是第一个需要通过 spark 读取与 hdfs 上的文本文件不同的东西的人!

【问题讨论】:

【参考方案1】:

我找到了一个可行的解决方案:使用 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.

【讨论】:

谢谢 - 这很有趣。只是想知道您是否也使用 spark 进行 tiff 文件分析?我正在处理大型(~800MB)tiff 文件,并想从 numpy 数组创建一个 pyspark RDD,但不知道如何去做。 根据我的实验,如果我正确准备数据会容易得多:我将图像文件转换为包含重叠图像块的“avro”文件。我必须处理非常大的图像(400 Mpixels),这对我来说是最好的解决方案。

以上是关于使用 pyspark,在 h​​adoop 文件系统上读/写 2D 图像的主要内容,如果未能解决你的问题,请参考以下文章

从pyspark中的文本文件中删除第一行和最后一行

鍦℉adoop-3.1.2涓婂畨瑁匟Base-2.2.1

如何将数据从 PySpark 持久化到 Hive - 避免重复

涓嶈閿欒繃锛孒adoop銆丼park 鏍稿績鎶€鏈爤璁茶В

Spark应用程序开发流程

如?何?使?用?P?H?P?开?发?高?效?的?W?E?B?系?统