我试图读取包含一些数据聚合在hadoop Excel文件。映射减少程序似乎工作良好,但输出产品是在一个不可读的格式。我需要使用任何特殊的InputFormat阅读器的Excel文件在Hadoop Map 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;
输出结果如下所示�千瓦��O���]n��Ε��r3� n"����p饚6 w�jJ���9 w�f =��9毫升���y/博士Ք��7�^我���M *Ք�^新西兰��l��^)���妗j�(�7��ͱ博士/TS *��M//7�T��,�生理��o��TSR�7�@��o��TӺ��5{%��+��ۆ�将-��= e��_}米�)~��ʅ��ژ���:# j��]��你����>
我不知道是否有人真的为MS Excel文件开发了一个自定义的InputFormat(我怀疑它,快速研究没有发现任何东西),但你肯定不能使用TextInputFormat来读取Excel文件。XSL文件是二进制的。
解决方案:将Excel文件导出为CSV或TSV,然后可以使用TextInputFormat加载它们。
我知道这有点晚了,但是现在已经有人创建了excel输入格式作为这种问题的标准解决方案。阅读本文-https://sreejithrpillai.wordpress.com/2014/11/06/excel-inputformat-for-hadoop-mapreduce/
有一个github项目和代码库。
看这里- https://github.com/sreejithpillai/ExcelRecordReaderMapReduce/
您还可以使用HadoopOffice库,该库允许您使用Hadoop和Spark读写Excel。它可以在Maven Central和Spark包中获得。
https://github.com/ZuInnoTe/hadoopoffice/wiki