Hadoop在Mapper内部获取Input File的文件名

好吧,我承认用Hadoop来处理大数据是件很酷的事。但是有时候在做course project的时候还是让我很受挫。
很多时候我们在一个map-reduce任务中,会用到Join,这样整个job的输入可能就是两个以上的文件了(换句话说:mapper要处理两个以上的文件)。

如何用mapper处理多输入的情况:

多个mapper:每个mapper处理对应的输入文件https://github.com/zhouhao/Hadoop_Project1/blob/master/MapReduceQueries/Query3/query3.java

 <!-- lang: java -->
  MultipleInputs.addInputPath(conf, new Path(args[0]), TextInputFormat.class, CustomerMap.class);
  MultipleInputs.addInputPath(conf, new Path(args[1]), TextInputFormat.class, TransactionMap.class);
  FileOutputFormat.setOutputPath(conf, new Path(args[2]));      

一个mapper:一个mapper处理所有不同的文件:https://github.com/zhouhao/CS525-Big-Data-Course-Project/blob/master/OtherDemo/query1.java(如下代码段,在mapper内部,我们可以数据来自哪个文件,然后进行相应的处理)

     <!-- lang: java -->
      public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> 
    {

	public void map(LongWritable key, Text value, OutputCollector<Text,Text> output, Reporter reporter) throws IOException 
	{
		//Get FileName from reporter
		FileSplit fileSplit = (FileSplit)reporter.getInputSplit();
		String filename = fileSplit.getPath().getName();

		//String line = value.toString();
		output.collect(new Text(filename),value);  			
    }
    }

PS: mapper的输入可以是一个文件夹:FileInputFormat.setInputPaths(conf, new Path("/tmp/"));

转载于:https://my.oschina.net/sbzhouhao/blog/165495

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值