0

我能够处理来自 xml 的两个节点。我得到下面的输出:

bin/hadoop fs -text /user/root/t-output1/part-r-00000
    name:ST17925 currentgrade 1.02
    name:ST17926 currentgrade 3.0
    name:ST17927 currentgrade 3.0

但我需要有一个像这样的输出:

studentid curentgrade
ST17925 1.02
ST17926 3.00
ST17927 3.00

我怎样才能做到这一点?

我的完整源代码:https ://github.com/studhadoop/xml/blob/master/XmlParser11.java

编辑:解决方案

protected void setup(Context context) throws IOException, InterruptedException {
    context.write(new Text("studentid"), new Text("currentgrade"));            
  }
4

1 回答 1

2

我认为很难与您的 MapReduce 代码一起执行此操作。原因是

  1. 标头可能不是相同的数据类型
  2. 如果类型相同,您可以从 Reducer 代码的 setup() 方法中编写标头,但不能保证标头会出现在输出中的第一行。

充其量您可以做的是,在第一次遇到列限定符时创建一个单独的 HDFS/ 本地文件,其中包含映射代码中的标题。您需要使用适当的文件操作 API 来创建此文件。稍后当工作完成时,您可以在其他程序中使用这些标题或将它们合并为一个文件。

于 2013-05-02T06:33:10.183 回答