是否有可能以任何方式在Driver类中提供多个输入文件夹位置?
我有4个输入文件夹位置,在这种情况下我们如何在我的驱动程序类中指定所有4个文件夹位置,以便我的映射器可以从这4个不同文件夹中的所有文件中读取数据。
非常感谢...
答案 0 :(得分:0)
您可以使用MultipleInputs类添加输入文件。
MultipleInputs.addInputPath(job, inputPath, TextInputFormat.class, MyMapper.class);
您可以将上述inputPath替换为您的文件位置,将TextInputFormat.class替换为输入文件格式,将MyMapper.class替换为mapper类。
这样您就可以根据需要添加任意数量的文件。
答案 1 :(得分:0)
如果这4个位置的数据不同,那么您可能需要考虑创建4个不同的映射器类来读取它们。您的代码看起来类似于下面的示例。在执行时,将您的位置作为参数传递给序列广口瓶中。
public class MultiplePaths {
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(MultiplePaths.class);
conf.setJobName("MultipleMappersPaths");
conf.setMapOutputKeyClass(Text.class);
conf.setMapOutputValueClass(Text.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(Text.class);
MultipleInputs.addInputPath(conf,new Path(args[0]),TextInputFormat.class,LocationMapper1.class);
MultipleInputs.addInputPath(conf,new Path(args[1]),TextInputFormat.class,LocationMapper2.class);
MultipleInputs.addInputPath(conf,new Path(args[2]),TextInputFormat.class,LocationMapper3.class);
MultipleInputs.addInputPath(conf,new Path(args[3]),TextInputFormat.class,LocationMapper4.class);
FileOutputFormat.setOutputPath(conf, new Path(args[2]));
JobClient.runJob(conf);
}
}
否则,如果你必须从4个不同的位置读取类似的文件,你的代码应该类似于下面的例子。在执行jar时按顺序将你的位置作为参数传递。
MultipleInputs.addInputPath(conf,new Path(args[0]),TextInputFormat.class,LocationMapper.class);
MultipleInputs.addInputPath(conf,new Path(args[1]),TextInputFormat.class,LocationMapper.class);
MultipleInputs.addInputPath(conf,new Path(args[2]),TextInputFormat.class,LocationMapper.class);
MultipleInputs.addInputPath(conf,new Path(args[3]),TextInputFormat.class,LocationMapper.class);