java - 如何在一个映射器中获得多个输出(k,v)?

标签 java hadoop mapreduce mapper

函数映射中,通常您会得到一个(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/

相关文章:

java - Eclipse 的 UML 插件 - 类图和 Java 代码生成 - Indigo/Juno

java - HTTPPOST 返回 404 ANDROID

hadoop - Web 平台安装程序 Hadoop 重新安装

java - 自定义二进制输入-Hadoop

java - 两个具有多个数据源的映射器

java - Maven 找不到本地安装的 Artifact ,该 Artifact 仅存在于本地安装

java - 带有 Fragments 的 AdapterView 不支持 addView(View)

hadoop - 我有 hadoop 1.2.1 和 hive 0.14.0

java - 包装类型在Hadoop中如何工作?

csv - 读取大量 csv 文件时 mapreduce 失败