您好,我已经在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只是一个单个标记中有几个标记的示例。
2条答案
按热度按时间epfja78i1#
这是你想要的https://github.com/studhadoop/xmlparsing-hadoop/blob/master/xmlparser11.java
名称和值是xml文件中的标记。在你的例子中,如果你需要在faculty内部处理标签,你可以用name代替name,age代替value。
dw1jzc5e2#
对于xml,您通常希望将其放入avro之类的协议缓冲区中,并从中进行处理。hadoop生态系统是在处理非结构化数据并将其转换为hdfs结构化数据的基础上成长起来的。。。因此,结构化数据的接收和处理还不是生态系统中一个直观的部分。mahout在其bayes包中有一些xml吸收代码,其工作原理与sree的答案非常相似。