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 中跟踪软件包版本。
我正在尝试处理包含 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 中跟踪软件包版本。