Hadoop的map获取当前spilt文件名


map函数:

               protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, NullWritable>.Context context)
				throws IOException, InterruptedException {
			FileSplit fileSplit = (FileSplit) context.getInputSplit();
			//获得当前子目录名
			String pathName=fileSplit.getPath().getName();
			//获得全路径
			String path=fileSplit.getPath().toString();
			//获得父目录的全路径
			String parentPath=fileSplit.getPath().getParent().toString();
			//获取父目录的目录名
			String parentPathName=fileSplit.getPath().getParent().getName();
			//整和Mapkey
			String mapkey=pathName+"|"+path+"|"+parentPath+"|"+parentPathName;
			context.write(new Text(mapkey),NullWritable.get());
		}



问题场景:当有很多个小文件,需要把每个小文件的目录名加进小文件内容中并转换输出,用一个map类的话可以处理每一行数据的时候读取这行数据的目录名加到第一个字段输出。。

这样输出的结果例子:

-r-00036.gz|hdfs://hadoop:9000/user/personbehavior/2015-10-07/final/final300w/-r-00036.gz|hdfs://hadoop:9000/user/personbehavior/2015-10-07/final/final300w|final300w
-r-00036.gz|hdfs://hadoop:9000/user/personbehavior/2015-10-07/final/final300w/-r-00036.gz|hdfs://hadoop:9000/user/personbehavior/2015-10-07/final/final300w|final300w




然而,实际中并没有这么做,而是重写了LineRecordReader。。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值