我正在使用Hadoop来计算单词之间的共现相似性。我有一个由共同出现的单词对组成的文件,如下所示:
a b
a c
b c
b d
我正在使用一种基于 Graph 的方法,将单词视为节点,同时出现的单词在它们之间有优势。我的算法需要计算所有节点的程度。我已成功编写Map-Reduce
作业来计算输出以下内容的总学位:
a 2
b 3
c 2
d 1
目前,输出被写回文件,但我想要的是将结果捕获到例如java.util.HashMap
。然后,我希望在另一个HashMap
作业中使用此Reduce
来计算最终的相似度。
以下是我的问题:
List
,Map
)。如果是这样,怎么样?答案 0 :(得分:1)
有两种可能性:或者您从分布式文件系统中读取map / reduce任务中的数据。或者直接将其添加到分布式缓存中。我只是用google搜索分布式缓存大小,它可以被控制:
“local.cache.size参数控制的大小 DistributedCache。默认情况下,它设置为10 GB。“
因此,如果您将第一个作业的输出添加到第二个作业的分布式缓存中,我认为应该没问题。成千上万的条目远不及千兆字节范围。
将文件添加到分布式缓存中如下:
您在映射器中阅读:
Path[] uris = DistributedCache.getLocalCacheFiles(context.getConfiguration());
String patternsFile = uris[0].toString();
BufferedReader in = new BufferedReader(new FileReader(patternsFile));
添加到DBCache:
DistributedCache.addCacheFile(new URI(file), job.getConfiguration());
在设立第二份工作时。
如果这样做,请告诉我。