您的位置:首页 > 运维架构

Hadoop的map获取当前spilt文件名

2015-10-30 17:39 337 查看
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。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: