鲍礼彬的CSDN博客 ~_~

深度学习、机器学习、Hadoop、Spark

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。。




阅读更多
版权声明:分享的快乐。。 https://blog.csdn.net/baolibin528/article/details/49514641
个人分类: Bigdatda-MapReduce
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭