如何在一个映射器中获得多个输出 (k, v)?
how to get multiple output (k, v) in one mapper?
在 function map 中,通常你会得到一个 (k,v) with 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 格式,它是一行)。因此映射器函数在每个输入拆分上运行并生成输出键值对。
例如:映射器的输入:
这是一个例子
mapper 将每一行作为输入拆分。映射器的输入是 (0,This is an example) 其中键是偏移位置,值是完整的行。然后根据您的地图功能逻辑,它会生成输出。所以你想计算他的字数然后你的输出将是,
(This,1) (is,1) (an,1) (example,1)。
现在看到这个映射器已经生成了具有各种键值对的输出。现在这被称为中间输出。在将它们发送到减速器之前,会对它们进行改组。让我知道这是否有意义。
在 function map 中,通常你会得到一个 (k,v) with 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 格式,它是一行)。因此映射器函数在每个输入拆分上运行并生成输出键值对。 例如:映射器的输入:
这是一个例子
mapper 将每一行作为输入拆分。映射器的输入是 (0,This is an example) 其中键是偏移位置,值是完整的行。然后根据您的地图功能逻辑,它会生成输出。所以你想计算他的字数然后你的输出将是, (This,1) (is,1) (an,1) (example,1)。
现在看到这个映射器已经生成了具有各种键值对的输出。现在这被称为中间输出。在将它们发送到减速器之前,会对它们进行改组。让我知道这是否有意义。