如何在一个映射器中获得多个输出 (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)。

现在看到这个映射器已经生成了具有各种键值对的输出。现在这被称为中间输出。在将它们发送到减速器之前,会对它们进行改组。让我知道这是否有意义。