python - 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 要么是空的。
我主要需要填写字节数组,以及一个来源。虽然,当观察我系统上使用的内存时,有一个明显的峰值,表明它肯定加载了一些东西。
我做错了什么或不受支持?
解决方案
-1
s 表示对应的图片无效。如果您添加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 索引中跟踪包版本。