mapper函数中的MultipleOutput具有Hadoop版本问题

时间:2017-05-17 18:04:28

标签: hadoop mapreduce multipleoutputs

我正在实施Hadoop mapreduce。我对地图的输入是一个表格,如下所示:

  

customerid,IP,Attr,日期

     

customer1,IP1,attr1,date1

     

customer2,IP2,attr1,date2

映射器的输出应该是多个文件

文件1:IP-m-00000

  

键,值

     

customer1_IP1,date1

     

customer2_IP2,date2

文件2:Attr-m-00000

  

键,值

     

customer1_attr1,date1

     

customer2_attr1,date2

我安装了hadoop 2.2.0,我正在使用以下代码

MultipleOutputs.addMultiNamedOutput (job, "IP", TextOutputFormat.class, Text.class, Text.class); //  in the Driver.class
MultipleOutputs.getCollector("IP", context).collect(txtKey, txtValue); // in the Mapper.class

我的txtKey是customerid_ $ Attribute,txtValue是日期。

我在另一台个人计算机上安装了2.8.0,而且MultipleOutputs对象具有写入功能,非常容易实现。 hadoop-2.2.0中没有实现hadoop-2.8.0中的MultipleOutputs.write()。

有关如何在hadoop-2.2.0中编写multipleOutput文件的任何想法,我们没有MultipleOutputs.write()函数吗?

如果这个问题需要任何修改,请你评论一下,不要关闭这个问题!

谢谢, 大师

1 个答案:

答案 0 :(得分:0)

上面的代码包含addMultiNamedOutput()方法,如果您有多级输出,则使用此方法。改为使用.addNamedOutput()方法,它适用于hadoop-2.2.0。

如果您想要Attr-m / r-00000,请使用.addNamedOutput()方法。 如果你想要Attr-SubAttr-m / r-00000,请使用.addMultiNamedOutput()方法。