HDFS API 操作实例(二) 目录操作
1. 递归读取文件名
1.1 递归实现读取文件名(scala + listFiles)
/**
* 实现:listFiles方法
* 迭代列出文件夹下的文件,只能列出文件
* 通过fs的listFiles方法可以自动实现递归(自带递归)列出文件类型
* 第一个参数是服务器路径,第二个参数是否递归
* @param srcPath
*/
def listFullFileNames(srcPath: String): List[String] = {
val buffer = new ArrayBuffer[String]
try {
val iterator: RemoteIterator[LocatedFileStatus] = fs.listFiles(new Path(srcPath), true)
while (iterator.hasNext) {
val fileStatus = iterator.next()
buffer.append(fileStatus.getPath.getName)
}
} finally {
this.closeFS(fs)
}
buffer.toList
}
1.2 递归实现读取文件名(scala + listStatus)
/**
* 通过fs的listStatus方法可以自动实现递归(自带递归)列出文件类型
* @param srcPath 目录
* @param buffer 全局的 ArrayBuffer
* @return
*/ val buffer = new ArrayBuffer[String]()
def listFullFileNames(srcPath: String, buffer: ArrayBuffer[String]): List[String] = {
val fileStatuses: Array[FileStatus] = fs.listStatus(new Path(srcPath))
for (fileStatus <- fileStatuses) {
//判断当前迭代对象是否是目录
if (fileStatus.isDirectory) {
listFullFileNames(fileStatus.getPath.toString, buffer)
} else {
buffer.append(fileStatus.getPath.getName)
}
}
buffer.toList
}
注意:使用了全局buffer,以至于递归收集文件数目
1.3 列出某个目录读取文件名(scala)
/** 列出具体路径下的所有文件名称 **/
def listFilesNames(finalPath: String): List[String] = {
val listStatus = try {
fs.listStatus(new Path(finalPath)).map(_.getPath.getName).toList
} catch {
case e: Exception => Nil
}
listStatus
}
2. 获取文件状态
2.1 HDFS文件的属性获取
def readFileContent(path: String) = {
val conf: Configuration = new Configuration()
val fs: FileSystem = FileSystem.newInstance(conf)
val fileStatus: Array[FileStatus] = fs.listStatus(new Path(path))
for (fileStatue <- fileStatus) {
println(
s"""
| 是否为目录: ${fileStatue.isDirectory}
| 是否为文件: ${fileStatue.isFile}
| 该文件上次访问时间:${fileStatue.getAccessTime}
| 文件块大小: ${fileStatue.getBlockSize}
| 文件所属组: ${fileStatue.getGroup}
| 文件长度:${fileStatue.getLen}
| 文件最后修改时间:${fileStatue.getModificationTime}
| 文件所有者:${fileStatue.getOwner}
| 文件的路径:${fileStatue.getPath}
| 文件的父路径:${fileStatue.getPath.getParent}
| 文件的名称:${fileStatue.getPath.getName}
| 文件的权限:${fileStatue.getPermission}
| 文件副本数:${fileStatue.getReplication}
| ${fileStatue.getSymlink}
""".stripMargin) }
}
2.2 正则表达式获取文件状态
/**
* 正则获取文件信息
*/
def readStatusGlobStatus() = {
val conf: Configuration = new Configuration()
// val fs: FileSystem = FileSystem.newInstance(conf)
val fs = FileSystem.get(new URI("hdfs://192.xxx.xxx.xxx:9000"), conf, "master")
val path = new Path("/user/compass/*/*") // 路径正则表达式
val fileStatus: Array[FileStatus] = fs.globStatus(path) // 文件名数组
for (fileStatue <- fileStatus) {
println(
s"""
| 文件的名称:${fileStatue.getPath.getName}
| 文件的路径:${fileStatue.getPath}
""".stripMargin)
}
}
2.3 正则表达式过滤文件
/**
* 过滤文件信息
* 过滤出包含compass的路径
*/
def readStatusFilterGlobStatus() = {
val conf: Configuration = new Configuration()
// val fs: FileSystem = FileSystem.newInstance(conf)
val fs = FileSystem.get(new URI("hdfs://192.xxx.xxx.xxx:9000"), conf, "master")
val path = new Path("/user/compass/*/*") // 路径正则表达式
val fileGlobStatuses = fs.globStatus(path, new PathFilter {
override def accept(path: Path): Boolean = {
val contidion: String = "compass"
path.toString.contains(contidion)
}
})
注:globStatus 很灵活,内部甚至可以写一些正则表达式,有时候在处理大数据的预处理的时候可能很有效
参考:https://www.cnblogs.com/yinzhengjie/p/9094087.html
HDFS API 操作实例(二) 目录操作的更多相关文章
- linux文件操作篇 (四) 目录操作
#include <sys/stat.h>#include <unistd.h>#include <dirent.h> //创建文件夹 路径 掩码 int mkdi ...
- Selenium常用操作汇总二——如何操作select下拉框
下面我们来看一下selenium webdriver是如何来处理select下拉框的,以http://passport.51.com/reg2.5p这个页面为例.这个页面中有4个下拉框,下面演示4种选 ...
- Selenium常用操作汇总二——如何操作cookies(转)
Web 测试中我们经常会接触到Cookies,一个Cookies主要属性有”所在域.name.value.有效日期和路径",下面来讲一下怎么操作Cookies. import java.ut ...
- Python学习笔记(二十五)操作文件和目录
摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319253241 ...
- Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化
IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...
- SSISDB2:SSIS工程的操作实例
SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...
- IO编程(2)-操作文件和目录
操作文件和目录 如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只 ...
- os,操作文件和目录
如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...
- python学习笔记 操作文件和目录
如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...
随机推荐
- 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)
链接:https://ac.nowcoder.com/acm/contest/925/K来源:牛客网 题目描述 公元2019年6月22日,白山茶王国与红玫瑰王国展开大战,在世外仙境——天空花园处,双方 ...
- python中的缓存技术
python缓存技术 def console(a,b): print('进入函数') return (a,b) print(console(3,'a')) print(console(2,'b')) ...
- 巧用Wget快速建立文件下载中心
Wget基本用法:1) 从网上下载单个文件 wget http://www.freehao123.com/file.iso 2) 下载一个文件,但以不同的名字存为本地文件 wget –output-d ...
- 4、APP FPS测试
什么是FPS FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数.FPS是测量用于保存.显示动态视频的信息数量.每秒钟帧数愈多,所显示的动作就会愈流畅.通常,要避免动作不 ...
- JMeter AI图片识别接口并发量测试
由于临时接到一个性能测试任务,测试8个独立接口在实验室环境的TPS.响应时间以及服务器性能监控如CPU.内存.IO等,没有明确具体的响应时间与并发数,需求较模糊. 1.软件.硬件环境信息:JMeter ...
- C-Ubuntu中MySQL出现ERROR1698(28000):Access denied for user root@localhost错误解决方法
卸载原先的MySQL,重新安装过程中没有提示设置密码, 当键入命令:mysql -uroot -p; 不知密码是什么,输入主机的密码以及不输入密码,回车后都出现标题错误. 寻找多篇相关博文,验证如下博 ...
- 第八篇 编写spider爬取jobbole的所有文章
通过scrapy的Request和parse,我们能很容易的爬取所有列表页的文章信息. PS:parse.urljoin(response.url,post_url)的方法有个好处,如果post_ur ...
- Windows平台将远程服务器的目录挂载为本地磁盘
我们在设置数据库自动备份时,为了数据的安全往往需要直接将数据备份到远程服务器上.在Linux可以通过NFS挂载来实现,在Windows平台可以直接通过net use+subst来实现将远程服务器的目录 ...
- linux 磁盘与文件系统管理 (鸟哥私房菜)
各种接口磁盘在Linux中的文件名分别为 /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash随身碟等接口的磁盘文件名 /dev/hd[a-d][1-63]:为IDE接口的磁 ...
- 用Cygwin实现在window环境下使用Linux命令-nohup 来后台运行程序
1.安装Cygwin 下载 cygdrive-选择64或32位 http://www.cygwin.com/ 注:可以百度搜索安装步骤 2.配置它的环境变量 添加到path路径中 3.cmd 执 ...