在函数Map中,通常会得到一个(k,v)和output.collect(k,v)
但是我如何在一个函数图中得到多个(k,v)
我试过这样的循环:
for (int i = 0; i < liste_cle.length; i++)
{
if (cle_R.equals(liste_cle[i].cle))
{
ListIterator iterator = liste_cle[i].l.listIterator();
while(iterator.hasNext())
output.collect(new Text(iterator.next().toString()), new Text(val_R));
}
}
例如,如果liste_cle.length=4,理论结果为:
01a d
01b d
01c d
01天d
但真正的结果是:
01a仅d
任何帮助都将不胜感激。
1条答案
按热度按时间ws51t4hk1#
你的问题不够清楚。mapper获取(k1,v1)并生成(k2,v2)作为每个inputspilt的输出(对于textinpu格式,它是一行)。所以mapper函数在每个输入分割上运行,并生成输出键值对。例如:Map器的输入:
这是一个例子
mapper将每一行作为一个输入分割。Map器的输入是(0,这是一个示例),其中key是偏移位置,value是complete line。然后根据map函数逻辑生成输出。所以你要计算字数,那么你的输出是,(this,1)(is,1)(an,1)(例如,1)。
现在看这个Map器已经生成了各种键值对的输出。现在这叫做中间输出。在把它们送到减速机之前,会对它们进行洗牌。让我知道这是否合理。