如何将 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)
我有一个 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)