如何在一个Map器中获得多个输出(k,v)?

qnakjoqk  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(410)

在函数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
任何帮助都将不胜感激。

ws51t4hk

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器已经生成了各种键值对的输出。现在这叫做中间输出。在把它们送到减速机之前,会对它们进行洗牌。让我知道这是否合理。

相关问题