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

Python Spark:读取tif图像时,数据帧仅包含具有空字节数组的行,python,apache-spark,tiff,Python,Apache Spark,Tiff,我正在尝试处理多个包含810个独立tif文件的文件夹 文件夹结构: 在尝试为此创建数据帧时,我遇到了加载的ByteArray为空的问题。我显然需要这些来处理 数据帧创建: spark = SparkSession \ .builder \ .appName(name) \ .config("spark.executor.memory", "2g") \ .config("spark.driver.memory", "2g") \ .config("spa

我正在尝试处理多个包含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显然包含基本文件夹作为第一个参数。当调试(通过调试器或打印)时,我注意到我的数据帧是一组只设置了原点的行,所有其他值要么为-1要么为空

我主要需要填充字节数组,以及一个原点。尽管如此,当观察我的系统上使用的内存时,有一个明显的尖峰,表明它确实加载了一些东西


我是做错了还是不受支持?

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

Spark使用Java的
ImageIO
库读取图像<代码>图像IO利用插件支持不同的图像格式。最多8个Java版本仅附带JPEG、PNG、BMP、WBMP和GIF插件。Java9为TIFF添加了一个标准插件。因为Spark官方只支持Java 8,所以您可以选择使用第三方TIFF插件来实现
ImageIO
,例如由其他堆栈溢出用户提供

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

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

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

遗憾的是,如果我删除无效的软件包版本,我将一个也没有留下。你关于这些库的第二个注释是有意义的。遗憾的是,我的spark项目是用python编写的。您认为将--jars path/to/imagio/lib添加到spark submit调用中会自动将jar加载到jvm中,从而使我能够读取TIF吗?您可以直接在
spark.jars.packages
中传递Maven包坐标。添加包或它的JAR就足够了——ImageIO插件是自动解析的。但是,添加建议的行后,现在无法初始化javax.imageio.imageio类。我注意到它没有从maven下载imageio核心内容。可能是这样吗?显然,它还需要
imageio内核
包。我现在正在更新答案。我的Maven foo很弱,但在POM文件中,
imageio core
依赖项出现了两次,第二次被标记为测试依赖项。可能因为这个原因,解析器跳过了它,所以需要手动添加它。