有没有可能在驱动程序类中提供多个输入文件夹位置?我有4个输入文件夹的位置,在这种情况下,我们可以指定我的驱动程序类中的所有4个文件夹的位置,使我的Map器可以读取数据从所有文件在这4个不同的文件夹。谢谢。。。
zd287kbt1#
如果这4个位置中的数据不同,那么您可能需要考虑创建4个不同的Map器类来读取它们。您的代码看起来与下面的示例类似。在执行jar时,将位置作为参数按顺序传递。
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);
i34xakig2#
可以使用multipleinputs类添加输入文件。
MultipleInputs.addInputPath(job, inputPath, TextInputFormat.class, MyMapper.class);
您可以将上述输入路径替换为文件位置,将textinputformat.class替换为输入文件格式,将mymapper.class替换为Map器类。通过这种方式,您可以根据需要添加任意多的文件。
2条答案
按热度按时间zd287kbt1#
如果这4个位置中的数据不同,那么您可能需要考虑创建4个不同的Map器类来读取它们。您的代码看起来与下面的示例类似。在执行jar时,将位置作为参数按顺序传递。
否则,如果您必须从4个不同的位置读取类似的文件,那么您的代码应该类似于下面的示例。在执行jar时,将您的位置作为参数按顺序传递。
i34xakig2#
可以使用multipleinputs类添加输入文件。
您可以将上述输入路径替换为文件位置,将textinputformat.class替换为输入文件格式,将mymapper.class替换为Map器类。
通过这种方式,您可以根据需要添加任意多的文件。