我希望访问hadoop中的一个目录(通过python流)并循环遍历它的图像文件,计算Map器中每个文件的哈希值。下面的逻辑有意义吗(我可以把目录作为输入传递给hadoop,而不是硬编码)?
lotsdir= 'hdfs://localhost:54310/user/hduser/randomimages/'
import glob
path = lotsdir + '*.*'
files = glob.glob(path)
files.sort()
imagehashes={}
for fname in files:
imagehashes[fname]=pHash.imagehash( fname )
2条答案
按热度按时间xienkqul1#
是的,逻辑是有道理的。
但是您很可能会遇到性能问题,因为您的输入文件不是文本格式的,所以它们不会在hdfs上正确分割。
希望hadoop能提供几种方法来解决这个问题。例如,您可以:
将图像文件转换为sequencefile并存储到hdfs中
编写自己的inputformat、outputformat和recordreader,以便正确地拆分它们
vdzxcuhz2#
您还可以尝试将图像文件内容打印为编码字符串,例如:[[1,2,3],[4,5,6]]在stdin中变成1:2:3:4:5:6。然后您的Map器可以从stdin读取并解码(因为您知道图像的尺寸)它返回到numpy数组(只需几行就可以对extarction和array reforme进行编号)代码。这基本上就是你的形象。我在做一个类似的项目,也面临着这些问题。希望对你有用。