目前,我正在使用Spark进行图像分类编程。我需要将所有图像读取到内存中作为RDD,我的读取方法如下:
val images = spark.wholeTextFiles("hdfs://imag-dir/")
imag-dir 是HDFS上存储目标图像的目录。使用这种方法,所有图像将被加载到内存中,每张图像将被组织为“图像名称,图像内容”的对。然而,我发现这个过程非常耗时,有没有更好的方法将大规模图像数据集加载到Spark中?
回答:
我怀疑这可能是因为你在HDFS上有很多小文件,这本身就是一个问题(所谓的‘小文件问题’)。这里你会找到一些解决这个问题的建议。
你可能还需要设置分区数量(wholetextFiles
的minpartitions
参数)为一个合理的数字:至少是集群中核心数量的2倍(详细信息请看这里)。
但总的来说,除了上述两个建议之外,你加载图像的方式是可以的,并且不是你问题的所在(假设spark
是你的Spark上下文)。