首页 > 解决方案 > Spark:读取 tif 图像数据帧时仅包含具有空字节数组的行

问题描述

我正在尝试使用 810 个单独的 tif 文件处理多个文件夹。

文件夹结构:

在此处输入图像描述

在尝试为此创建数据框时,我遇到了加载的字节数组为空的问题。我显然需要那些进行处理。

数据框创建:

spark = SparkSession \
    .builder \
    .appName(name) \
    .config("spark.executor.memory", "2g") \
    .config("spark.driver.memory", "2g") \
    .config("spark.executor.cores", "2") \
    .getOrCreate()
file_rdd = spark.read.format('image').load(argv[1] + '/' + '*/*')

Argv 显然包含基本文件夹作为第一个参数。调试(通过调试器或打印)时,我注意到我的数据框是一堆只有原始集的行,所有其他值要么是 -1 要么是空的。

在此处输入图像描述

我主要需要填写字节数组,以及一个来源。虽然,当观察我系统上使用的内存时,有一个明显的峰值,表明它肯定加载了一些东西。

我做错了什么或不受支持?

标签: pythonapache-sparktiff

解决方案


-1s 表示对应的图片无效。如果您添加dropInvalid选项并将其设置为True,则这些选项可能根本不存在。

Spark 使用 Java 的ImageIO库来读取图像。ImageIO利用插件支持不同的图像格式。Java 版本高达 8 只附带 JPEG、PNG、BMP、WBMP 和 GIF 插件。Java 9 为 TIFF 添加了一个标准插件。由于 Spark 官方仅支持 Java 8,因此您的选择是使用 3rd 方 TIFF 插件ImageIO,例如由 Stack Overflow 用户提供的这个插件。

要使用上述插件,请在 Spark 会话配置中添加如下内容:

.config("spark.jars.packages", "com.twelvemonkeys.imageio:imageio-tiff:3.5,com.twelvemonkeys.imageio:imageio-core:3.5") \

您可以在Maven 索引中跟踪包版本。


推荐阅读