Java 组合器中映射器输出加倍
映射器仅输出一次值。但是当我检查组合器时,它有两次值。这对我来说真的很奇怪 请帮忙 从中发送输出的映射代码模块:Java 组合器中映射器输出加倍,java,hadoop,mapreduce,combiners,Java,Hadoop,Mapreduce,Combiners,映射器仅输出一次值。但是当我检查组合器时,它有两次值。这对我来说真的很奇怪 请帮忙 从中发送输出的映射代码模块: for(int i = 0; i<alcmapi.size(); i++) { int section = 0; for(int j = 0; j<alcmapj.size(); j++) { if(!alcmapi.get(i).getid().equals(alcmapj.get(j).getid())) {
for(int i = 0; i<alcmapi.size(); i++)
{
int section = 0;
for(int j = 0; j<alcmapj.size(); j++)
{
if(!alcmapi.get(i).getid().equals(alcmapj.get(j).getid()))
{
int fi = Integer.parseInt(alcmapi.get(i).getField());
int fj = Integer.parseInt(alcmapj.get(j).getField());
ArrayList<CustomMap> al = new ArrayList<CustomMap>();
al.add(new CustomMap(alcmapi.get(i).getid(), fi));
al.add(new CustomMap(alcmapj.get(j).getid(), fj));
if(fi<fj)
{
section = fi;
}
else
{
section = fj;
}
Collections.sort(al);
{
output.collect(new Text(t+" "+al.get(0).getid()), new Text(al.get(1).getid()+" "+section));
}
}
}
}
提前谢谢 看起来像是针对所有其他元素测试所有元素。例如,如果元素3和5满足条件,那么您将写出一次i=3,j=5的配对,然后再次写出i=5,j=3的配对 我建议您将内部循环更改为:
for(int j = i+1; j<alcmapj.size(); j++)
for(int j=i+1;j表达式t+“”+al.get(0).getid()
不依赖于循环索引j
,因此它将为内部循环的每次迭代输出。i依赖于我的内部循环:检查行:ArrayList al=new arrarylist();al.add(new CustomMap(alcmap.get(i).getid(),fi));al.add(新自定义地图(alcmapj.get(j.getid(),fj));请帮助解决此问题
for(int j = i+1; j<alcmapj.size(); j++)