2013-04-07 36 views
1

我正在嘗試讀取包含一些數據的Excel文件,以便在hadoop中進行聚合。映射簡化程序似乎工作正常,但輸出產生的格式不可讀。要使用Excel文件的任何特殊InputFormat讀者在Hadoop中的Map Reduce?。我的配置如下圖讀取hadoop映射中的excel文件reduce

Configuration conf=getConf(); 
Job job=new Job(conf,"LatestWordCount"); 
job.setJarByClass(FlightDetailsCount.class); 
Path input=new Path(args[0]); 
Path output=new Path(args[1]); 
FileInputFormat.setInputPaths(job, input); 
FileOutputFormat.setOutputPath(job, output); 
job.setMapperClass(MapClass.class); 
job.setReducerClass(ReduceClass.class); 
//job.setCombinerClass(ReduceClass.class); 
job.setInputFormatClass(TextInputFormat.class); 
job.setOutputFormatClass(TextOutputFormat.class); 
job.setMapOutputKeyClass(Text.class); 
job.setMapOutputValueClass(Text.class); 
//job.setOutputKeyClass(Text.class); 
//job.setOutputValueClass(Text.class); 
System.exit(job.waitForCompletion(true)?0:1); 
return 0; 

輸出端產生看起來是這樣的 KW OA]Nε r3 \ n「 p 饚6W jJ 9W f= 9ml dR y/Ք 7^i M*Ք ^nz l ^) 妗j ( dRͱ/7 TS* M//7 TS & jZ o TSR 7 @ ) o TӺ 5{% + ۆ w6- = e _}m )〜 ʅ ژ :# j3] u >

+0

出於興趣,你怎麼甚至試圖解釋在你的映射器輸入數據? – jkovacs 2013-04-07 22:47:34

+0

在映射器中,列之間的分隔符是一個選項卡,我使用列位置解釋選定的一組字段,並且按行將整個數據行讀取爲字符串 – 2013-04-08 00:17:46

回答

5

我不知道是否有人實際爲MS Excel文件開發了一個自定義的InputFormat(我懷疑它和快速研究什麼都沒有發生),但是你肯定無法閱讀一個使用TextInputFormat的Excel文件。 XSL文件是二進制文件。

解決方案:將Excel文件導出爲CSV或TSV,然後您可以使用TextInputFormat加載它們。