Hadoop流式处理访问目录中的文件
我想通过Python流式处理访问Hadoop中的一个文件夹,并循环遍历里面的图片文件,在我的映射器中计算每个文件的哈希值。下面的逻辑是否合理?另外,我能不能像使用 -input 这样,把文件夹路径传给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 个回答
0
你也可以试着把图片文件的内容打印成一个编码的字符字符串,像这样: [[1, 2, 3], [4, 5, 6]] 变成 1:2:3:4:5:6 在标准输入中。然后你的映射器可以从标准输入读取这些数据,并解码(因为你已经知道图片的尺寸)回到一个numpy数组(只需要几行代码来提取数字和调整数组形状)。这基本上就是你的图片。我正在做一个类似的项目,也遇到过这些问题。希望这对你有帮助。
0
是的,这个逻辑是有道理的。
不过,你很可能会遇到性能问题,因为你的输入文件不是文本格式,所以在HDFS(分布式文件系统)上无法正确分割。
幸运的是,Hadoop提供了几种方法来解决这个问题。例如,你可以:
- 把你的图片文件转换成SequenceFile格式,然后存储到HDFS中
- 自己编写一个输入格式、输出格式和记录读取器,以便能够正确分割这些文件