在函数映射中,通常您会得到一个(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 abcd
01b abcd
01c abcd
01d abcd
但是真正的结果是:
仅01a abcd
任何帮助将不胜感激。
最佳答案
您的问题还不够清楚。映射器获取(k1,v1)并为每个输入分割生成(k2,v2)作为输出(对于textinpu格式,它是一行)。因此,映射器函数在每个输入拆分上运行,并生成输出键值对。
例如:输入到映射器:
这是一个例子
映射器将每一行作为输入拆分。映射器的输入是(0,这是一个示例),其中key是偏移位置,值是完整的行。然后根据您的 map 函数逻辑,它生成输出。因此,您要计算他的单词数,那么您的输出将是,
(this,1)(is,1)(an,1)(example,1)。
现在看到该映射器已生成具有各种键值对的输出。现在,这称为中间输出。在将它们发送到 reducer 之前,它们会发生改组。让我知道这是否有意义。
关于java - 如何在一个映射器中获得多个输出(k,v)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29455796/