Spark:读取 tif 图像数据帧时仅包含具有空字节数组的行

Spark: When reading tif images dataframe only contains rows with empty byte arrays

我正在尝试处理包含 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 要么是空的。

我主要是需要填写字节数组,还有一个origin。虽然,当观察我的系统上使用的内存时,有一个明显的尖峰,表明它确实加载了一些东西。

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

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

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

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

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

您可以在 Maven Index 中跟踪软件包版本。