gpt4 book ai didi

java - Hadoop (1.1.2) XML 处理和重写文件

转载 作者:可可西里 更新时间:2023-11-01 16:17:14 27 4
gpt4 key购买 nike

这里是第一个问题...和学习 hadoop...

过去 2 周我一直在努力了解有关 hadoop 的一切,但似乎每一座山背后都有一座山。

这是设置:

  1. 大量(100 万)个小型(<50MB)XML 文件(格式为 XML 的文档)。
  2. 每个文件都是一条记录/记录
  3. 伪分布式Hadoop集群(1.1.2)
  4. 使用旧的 mapred API(可以更改,如果新 API 支持所需内容)

我发现 XmlInputFormat(“Mahout XMLInputFormat”)是读取文件的良好起点,因为我可以将整个 XML 文档指定为

我的理解是 XmlInputFormat 将负责确保每个文件都是它自己的记录(因为每个文件/记录存在 1 个标记)。

我的问题是这样的:我想用Hadoop来处理每个文档,搜索信息,然后对每个文件/记录,重写或输出添加了新 xml 标记的新 xml 文档。

不怕看书怕学,有架子玩玩真的会“玩”学hadoop

这是我的司机:

public static void main(String[] args) {
JobConf conf = new JobConf(myDriver.class);
conf.setJobName("bigjob");
// Input/Output Directories
if (args[0].length()==0 || args[1].length()==0) System.exit(-1);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));

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

// Mapper & Combiner & Reducer
conf.setMapperClass(Mapper.class);
conf.setReducerClass(Reduce.class);
conf.setNumReduceTasks(0);

// Input/Output Types
conf.setInputFormat(XmlInputFormat.class);

conf.setOutputFormat(?????);

conf.setOutputKeyClass(????);
conf.setOutputValueClass(????);


try {
JobClient.runJob(conf);
} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

我想说一个简单的解决方案是使用 TextOutputFormat 然后使用 Text 作为输出键和 NullWritable 作为输出值。

TextOutputFormat 使用分隔符来分隔您从作业中输出的键值对。根据您的要求,您不需要这种安排,但您只想输出一个 XML 主体。如果您将 null 或 NullWritable 作为输出键或值传递,TextOutputFormat 将不会写入 null 或分隔符,而只会写入非 null 键或值。

另一种使用 XmlINputFormat 的方法是使用 WholeFileInput(详见 Tom White 的 Hadoop - 权威指南)。

无论哪种方式,您都需要编写映射器来使用输入值 Text 对象(可能使用 XML SAX 或 DOM 解析器),然后将转换后的 XML 作为 Text 对象输出。

关于java - Hadoop (1.1.2) XML 处理和重写文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17840126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com