java在hadoop中解析xml文件

qnakjoqk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(357)

您好,我已经在vmware上以伪分布式模式安装了hadoop-0.20.2-cdh3u5。我想使用这个已建立的环境解析一个xml文件。我可以编写map/reduce代码,然后将它们作为.jar文件导出到集群,然后在集群上执行它们。我不知道的是,如何将java解析代码(使用saxon解析器)放入map/reduce类中,然后在输出中生成csv文件。
所以我有这个解析代码:(在这里使用saxon解析器)

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class JAXBC {
    private JAXBContext context;
private Unmarshaller um;
public JAXBC() throws JAXBException
{
    // creating JAXB context and instantiating Marshaller
    JAXBContext context = JAXBContext.newInstance(ConnectHome.class);

    // get variables from the xml file
    um = context.createUnmarshaller();

}

  public ConnectHome convertJAXB(String strFilePath) throws FileNotFoundException,     
   JAXBException 
   { 
      return ((ConnectHome) um.unmarshal(new FileReader(strFilePath)));
   }
 }

我有这样的xml:(这里是示例元素)

<Course>
   <ID>1001</ID>
   <Seats>10</Seats>
   <Description>Department: CS , Faculty: XYZ</Description>
   <Faculty>
       <Name>XYZ</Name>
       <Age>30</Age>
   </Faculty>
 </Course>

现在我的问题是我不知道如何用map/reduce格式编写这段特定的代码。我把这个教程称为hadoop和雅虎的各种教程。
所以我的问题是,有人能告诉我如何编写这样一个map reduce代码,然后用它创建一个jar文件吗。
如果需要其他信息,请告诉我。我尽可能地矮。
提前谢谢。
注意:我知道这听起来像是mapreduce世界中一个非常琐碎的问题,我在这里展示的这个xml只是一个单个标记中有几个标记的示例。

epfja78i

epfja78i1#

这是你想要的https://github.com/studhadoop/xmlparsing-hadoop/blob/master/xmlparser11.java

line 170 :if (currentElement.equalsIgnoreCase("name")) 
line 173 :else if (currentElement.equalsIgnoreCase("value"))

名称和值是xml文件中的标记。在你的例子中,如果你需要在faculty内部处理标签,你可以用name代替name,age代替value。

conf.set("xmlinput.start", "<Faculty>");
 conf.set("xmlinput.end", "</Faculty>");
dw1jzc5e

dw1jzc5e2#

对于xml,您通常希望将其放入avro之类的协议缓冲区中,并从中进行处理。hadoop生态系统是在处理非结构化数据并将其转换为hdfs结构化数据的基础上成长起来的。。。因此,结构化数据的接收和处理还不是生态系统中一个直观的部分。mahout在其bayes包中有一些xml吸收代码,其工作原理与sree的答案非常相似。

相关问题