如何将 lmdb 文件转换为 PySpark Image DataFrame?

How to convert lmdb file to PySpark Image DataFrame?

我有一个 lmdb 文件,其值包含二进制字符串格式的 jpeg 图像数据。我想将所有图像保存到一个文件夹并创建一个 PySpark DataFrame 来进行我的分析。我这样做是因为我想使用这些数据在 TensorFlow 上训练 Mask RCNN 模型。

我有两个问题:

实现此目的的一种方法:将图像一张一张地保存到一个文件夹,然后将该文件夹作为 PySpark 图像数据帧读取。

import io
from PIL import Image

for key, value in lmdb_data:
    with io.BytesIO(value ) as f:
        image = Image.open(f)
        # The image is of class JpegImageFile 
        image.load()
        image.save(f"/tmp/lmdb_images/{key}.{image.format.lower()}")

df = spark.read.format("image").load("/tmp/lmdb_images/")
df.display()  

还有其他更efficient/elegant的方法吗?

我只能对 PIL 方面的事情发表评论,因为我不使用 PySpark

如果您的 lmbd 数据已经是 JPEG-encoded 图像,则没有必要将其解码为 PIL Image 然后 re-encoding 返回 JPEG 以将其保存到磁盘。您也可以将已有的 JPEG 写入磁盘。未经测试,但它看起来像:

for key, value in lmdb_data:
    with open(f"/tmp/...", "wb") as f:
       f.write(value)