我正在尝试处理包含810个独立tif文件的多个文件夹。
文件夹结构:

在尝试为此创建数据帧时,我遇到了加载的bytearray为空的问题。很明显我需要这些来处理。
数据帧创建:
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显然包含了作为第一个参数的基本文件夹。在调试(通过调试器或打印)时,我注意到我的dataframe是一堆只设置了原始值的行,所有其他值要么为-1,要么为空。

我主要需要填充字节数组,以及一个源。虽然,当观察我的系统上使用的内存时,有一个明显的峰值,表明它确实加载了一些东西。
我做错了什么或没有得到支持吗?
发布于 2020-04-22 06:32:33
-1表示相应的图像是无效的。如果添加dropInvalid选项并将其设置为True,则这些选项可能根本不存在。
Spark使用Java的ImageIO库来读取图像。ImageIO利用插件来支持不同的图像格式。Java版本8以下仅附带JPEG、PNG、BMP、WBMP和GIF插件。Java9为TIFF添加了一个标准插件。由于Spark官方仅支持Java8,因此您的选择是使用第三方ImageIO插件,例如由Stack Overflow用户提供的this one。
要使用前面提到的插件,请在Spark session配置中添加类似以下内容:
.config("spark.jars.packages", "com.twelvemonkeys.imageio:imageio-tiff:3.5,com.twelvemonkeys.imageio:imageio-core:3.5") \您可以在Maven Index中跟踪包版本。
https://stackoverflow.com/questions/61353106
复制相似问题