MultipleInputs.addInputPath(job, new Path(path),
SequenceFileInputFormat.class, ProfileMapper.class);
在mapper中再使用上面的那种方式,就会报出一个类型转换错误
java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
而我们需要的filesplit实际上就是TaggedInputSplit中的成员变量inputSplit
然而TaggedInputSplit这个类在社区版中并不是public的,所以我们并不能直接直接拿到对应的信息了.
不知道后续的社区版是怎么做的?可能已经修改了吧
我们公司使用的是0.19的加强版,采用的方式是把TaggedInputSplit声明为public,让后重新打一个包发布.这个是最简单的了.
(FileSplit)((TaggedInputSplit)reporter.getInputSplit()).getInputSplit(); 这样就能获得
MultipleInputs.addInputPath(job, new Path(path),
SequenceFileInputFormat.class, ProfileMapper.class);
在mapper中再使用上面的那种方式,就会报出一个类型转换错误
java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
而我们需要的filesplit实际上就是TaggedInputSplit中的成员变量inputSplit
然而TaggedInputSplit这个类在社区版中并不是public的,所以我们并不能直接直接拿到对应的信息了.
不知道后续的社区版是怎么做的?可能已经修改了吧
我们公司使用的是0.19的加强版,采用的方式是把TaggedInputSplit声明为public,让后重新打一个包发布.这个是最简单的了.
(FileSplit)((TaggedInputSplit)reporter.getInputSplit()).getInputSplit(); 这样就能获得
另外还可以直接通过反射来获得TaggedInputSplit中的inputSplit.处理过程就不写了
private String getFilePath(Context context) throws IOException { // FileSplit fileSplit = (FileSplit) context.getInputSplit(); InputSplit split = context.getInputSplit(); Class<? extends InputSplit> splitClass = split.getClass(); FileSplit fileSplit = null; if (splitClass.equals(FileSplit.class)) { fileSplit = (FileSplit) split; } else if (splitClass.getName().equals("org.apache.hadoop.mapreduce.lib.input.TaggedInputSplit")) { // begin reflection hackery... try { Method getInputSplitMethod = splitClass.getDeclaredMethod("getInputSplit"); getInputSplitMethod.setAccessible(true); fileSplit = (FileSplit) getInputSplitMethod.invoke(split); } catch (Exception e) { // wrap and re-throw error throw new IOException(e); } // end reflection hackery } return fileSplit.getPath().toString(); }
https://issues.apache.org/jira/browse/MAPREDUCE-1178
xxxxxxxxxxxxxxxxxxxxxxx学会从第一个链接的网站中找答案xxxxxxxxxxxxxxxxxxxxxxxx