Hadoop的map获取当前spilt文件名
2015-10-30 17:39
337 查看
map函数:
问题场景:当有很多个小文件,需要把每个小文件的目录名加进小文件内容中并转换输出,用一个map类的话可以处理每一行数据的时候读取这行数据的目录名加到第一个字段输出。。
这样输出的结果例子:
然而,实际中并没有这么做,而是重写了LineRecordReader。。
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。。
相关文章推荐
- artdialog插件open用法备忘
- linux重启Tomcat
- ecshop session 无法保存 ecshop 不用session_sart session经常保存不了 经常失效
- 【鸟哥的linux私房菜-学习笔记】Bash shell的变量功能及操作环境
- 定义网站收藏夹图标
- SELinux安全上下文的认识
- OpenJudge4079:二叉搜索树
- 基于tesseract_ocr实现图片中汉字辨识
- 实现windows8与virtual box linux虚拟机之间的文件共享
- ubuntu下安装opensips 最终总给版
- 『笔记』windows与CentOS间文件传输(win下实行)
- layout_marginTop="-3dp"导致内容被遮挡的问题处理
- cocopods 一直报错找不到头文件的问题解决办法
- Linux下使用dosemu编写汇编程序
- 架构设计:系统间通信(10)——RPC的基本概念
- python 常用的模块 optparse与ConfigParser
- centos google-flags/log 编译安装所产生的问题
- 安卓开发必须收藏的网站
- CentOS 6.4下编译安装MySQL 5.6.14
- FATAL,XX000,"highest timeline 14 of the primary is behind recovery timeline 15" rsync 增量重置备库