![](/img/trans.png)
[英]Split file input by comma into an array Java, and re-writing to the file
[英]Hadoop (1.1.2) XML processing & re-writing file
這里的第一個問題...和學習Hadoop ...
我花了最后兩個星期來嘗試了解有關hadoop的所有內容,但是似乎每座山都在后面。
設置如下:
我發現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
不會只寫非空鍵或值,而不會寫空值或定界符。
使用XmlINputFormat的另一種方法是使用WholeFileInput(如Tom White的Hadoop-權威指南中所述 )。
無論哪種方式,您都需要編寫映射器以使用輸入值Text對象(可能帶有XML SAX或DOM解析器),然后將轉換后的XML作為Text對象輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.